Chiu
  • 231

iris使用xorm,外键不更新

用户表

id name role_id
1 aaa1 1
2 aaa2 2
3 aaa3 1
4 aaa4 3

角色表

id name
1 管理员
2 角色2
3 角色3

为了直观,省略部分代码

type User struct{
    Id int64
    Name string
    Role *Role `json:"role" xorm:"'role_id' INT(11)"`//执行更新时,这个字段无法更新
}

type Role struct{
    Id int64
    Name string
}

创建用户

role:=Role{Id:3}
newUser:=User{
    Id:5,
    Name:"aaa6",
    Role:role,
}
_,_:=engine.InsertOne(&newUser)
fmt.Println(newUser)//{5 aaa6 0xc0004e9a00}

创建用户成功,数据库里role_id字段为3

更新用户

role:=Role{Id:2}
newUser:=User{
    Id:5,
    Name:"aaa6 update",
    Role:role,
}
n,err:=engine.ID(5).Update(&newUser)
fmt.Println(n,err)// 1 nil

更新后,name字段更新了,但role_id字段并没有更新为2,仍为原来的3


暂时这么解决,如果有好方法求告知,谢谢。

type User struct {
    Id int64
    Name string
    RoleId int64
    Role *Role `xorm:"-"`
}

放弃了,才发现xorm还不支持外键,好像只有一对一

阅读 450
评论 更新于 2019-07-14
    1 个回答

    那就别用外键呗,真的不是什么好东西。
    与其让数据库去控制一些事情,不如自己控制。

    评论 赞赏 2019-07-16
      撰写回答

      登录后参与交流、获取后续更新提醒