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还不支持外键,好像只有一对一

阅读 3.3k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题