如何将用户 ID 分配给外键
How to assign the User Id to Foreign Key
type Users struct {
Id int `orm:"pk;auto"`
Username string
Password string
Salt string
Email string `orm:"unique"`
}
type Post struct {
Id int `orm:"pk;auto"`
Users *Users `orm:"rel(fk)"`
Author string
Title string `form:"title,text,Title:" valid:"MinSize(5); MaxSize(20)"`
Description string `form:textarea`
Date time.Time `orm:"auto_now_add;type(datetime)"`
}
我正在尝试为 Users
赋值,因为它是外键。我想分配登录的用户ID。如何将Users
结构中的用户ID分配给Post
结构中的用户ID,这是外键。
o := orm.NewOrm()
o.Using("default")
post := models.Post{}
users := models.Users{}
if this.Ctx.Input.Method() == "POST" {
inputs := this.Input()
post.Author = sess.(string)
post.Title = inputs.Get("title")
post.Description = inputs.Get("description")
post.Date = time.Now()
}
首先回答你的问题:
post.Date = time.Now()
// This is your last line
// Up until now all good
post.Users = &users // Actually the naming is bad, should be post.User = user
o.Insert(users) // First create user
o.Insert(post) // Then insert post
这与BeeGo ORM提供的基本示例非常相似:https://beego.me/docs/mvc/model/orm.md
在现实世界中,您会注意到大多数时候您有一个用户,而您只想创建它一次。所以你首先要切换 Insert
到 ReadOrCreate
: https://beego.me/docs/mvc/model/object.md#readorcreate
话虽如此,根据我的经验,在 Go 中使用 MVC 和 ORM 框架并不是一个好主意。
type Users struct {
Id int `orm:"pk;auto"`
Username string
Password string
Salt string
Email string `orm:"unique"`
}
type Post struct {
Id int `orm:"pk;auto"`
Users *Users `orm:"rel(fk)"`
Author string
Title string `form:"title,text,Title:" valid:"MinSize(5); MaxSize(20)"`
Description string `form:textarea`
Date time.Time `orm:"auto_now_add;type(datetime)"`
}
我正在尝试为 Users
赋值,因为它是外键。我想分配登录的用户ID。如何将Users
结构中的用户ID分配给Post
结构中的用户ID,这是外键。
o := orm.NewOrm()
o.Using("default")
post := models.Post{}
users := models.Users{}
if this.Ctx.Input.Method() == "POST" {
inputs := this.Input()
post.Author = sess.(string)
post.Title = inputs.Get("title")
post.Description = inputs.Get("description")
post.Date = time.Now()
}
首先回答你的问题:
post.Date = time.Now()
// This is your last line
// Up until now all good
post.Users = &users // Actually the naming is bad, should be post.User = user
o.Insert(users) // First create user
o.Insert(post) // Then insert post
这与BeeGo ORM提供的基本示例非常相似:https://beego.me/docs/mvc/model/orm.md
在现实世界中,您会注意到大多数时候您有一个用户,而您只想创建它一次。所以你首先要切换 Insert
到 ReadOrCreate
: https://beego.me/docs/mvc/model/object.md#readorcreate
话虽如此,根据我的经验,在 Go 中使用 MVC 和 ORM 框架并不是一个好主意。