0

用户表

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

Chiu 188
2 天前提问
1 个回答
0

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

撰写答案

推广链接