Gorm: 怎么获取刚刚Create 的结果。

Created on 5 Jul 2017  ·  14Comments  ·  Source: go-gorm/gorm

大概是这样的需求,创建玩家角色name是唯一的。
type Player struct {
ID uint gorm:"primary_key;AUTO_INCREMENT"
Name string sql:"not null;unique"
...
}
var player Player
player = Player{Name: "TestName"}/// 这里是不是有问题了,id好像默认赋值成0了
玩家提供name,然后我调用db.Create(player).
我怎么知道是不是name重复了没创建成功,还是已经创建好了,如果成功了,我要获取我创建出来的player的id或者那个player所有信息也行。

Most helpful comment

db.Create(&player)
player可以取 ID 的

All 14 comments

You probably want this?

type Player struct {
    ID   uint `gorm:"primary_key"`
    Name string `gorm:"not null;unique"`
}

err := DB.Create(&Player{
    Name: "Byakuya Kuchiki",
}).Error
if nil != err {
    panic(err)
}

var player Player
err = DB.Limit(1).Find(&player).Error
if nil != err {
    panic(err)
}

使用*DB.Save()方法

Thx,Allendar.
That' cool.It works now.

db.Create(&player)
player可以取 ID 的

db.Create(&player) 后可以直接返回 player.ID

type User struct { id int32gorm:"PRIMARY_KEY;AUTO_INCREMENT" name string } result := Db.Create(&user) id := user.id

type User struct {
Id int32
Name string
}
use field upper case, cause reflect can read upper case field only

It works for me.

func AddOrder(tx *gorm.DB, order Order) (uint, int64) {

    flag := tx.Create(&order).RowsAffected

    orderId := order.OrderId

    return orderId, flag
}

If primary key is not id, should add comment, like this gorm:"column:order_id;primary_key"

image

OR

value := tx.Create(&order).RowsAffected.Value

image

db.Create(&player) 后可以直接返回 player.ID

如果ID是自增的,怎么办?

db.Create(&player) 后可以直接返回 player.ID

如果ID是自增的,怎么办?

你不用填 player.Id, 插入数据库, 数据库会自动进行自增长, 最后写入到 player.Id

db.Create(&player) 后可以直接返回 player.ID

如果ID是自增的,怎么办?

你不用填 player.Id, 插入数据库, 数据库会自动进行自增长, 最后写入到 player.Id

只返回创建数据的ID吗?一般来说创建或者更新之后需要那一条创建或者更新的数据返回使用。
怎么返回整条数据还是说有整条数据返回?
@jonSnow47

db.Create(&player) 后可以直接返回 player.ID

如果ID是自增的,怎么办?

你不用填 player.Id, 插入数据库, 数据库会自动进行自增长, 最后写入到 player.Id

只返回创建数据的ID吗?一般来说创建或者更新之后需要那一条创建或者更新的数据返回使用。
怎么返回整条数据还是说有整条数据返回?
@JonSnow47

这里不会将这个条目所有的数据返回到结构体里, 例如 player表中 age default 18, 然后 db.Create(&player), player.Id 会被赋值, 但是 player.Age 等参数是不会被赋值的, 除非重新查询

@JonSnow47 如果你在定义的时候表明这个有default值的话,GORM 会自动查询 age 的

It works for me.

func AddOrder(tx *gorm.DB, order Order) (uint, int64) {

  flag := tx.Create(&order).RowsAffected

  orderId := order.OrderId

  return orderId, flag
}

If primary key is not id, should add comment, like this gorm:"column:order_id;primary_key"

image

OR

value := tx.Create(&order).RowsAffected.Value

image

Hello @DonaldY , I try to use RowsAffected.Value but it says Value is undefined, since RowsAffected is an int value. How did you get Value as you shown in your reply?

Was this page helpful?
0 / 5 - 0 ratings

Related issues

hypertornado picture hypertornado  ·  3Comments

alanyuen picture alanyuen  ·  3Comments

rfyiamcool picture rfyiamcool  ·  3Comments

sredxny picture sredxny  ·  3Comments

corvinusy picture corvinusy  ·  3Comments