Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

怎么获取刚刚Create 的结果。 #1520

Closed
MikeJinhua opened this issue Jul 5, 2017 · 14 comments
Closed

怎么获取刚刚Create 的结果。 #1520

MikeJinhua opened this issue Jul 5, 2017 · 14 comments

Comments

@MikeJinhua
Copy link

大概是这样的需求,创建玩家角色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所有信息也行。

@Allendar
Copy link

Allendar commented Jul 5, 2017

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)
}

@hellojukay
Copy link

使用*DB.Save()方法

@MikeJinhua
Copy link
Author

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

@jinzhu
Copy link
Member

jinzhu commented Jul 6, 2017

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

@jinzhu jinzhu closed this as completed Jul 6, 2017
@chenyanchen
Copy link

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

@0x92bf
Copy link

0x92bf commented Mar 15, 2019

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

@chenyanchen
Copy link

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

@DonaldY
Copy link

DonaldY commented Apr 2, 2019

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

@itcuihao
Copy link
Contributor

itcuihao commented Jun 1, 2019

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

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

@chenyanchen
Copy link

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

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

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

@endingman
Copy link

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

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

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

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

@chenyanchen
Copy link

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

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

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

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

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

@jinzhu
Copy link
Member

jinzhu commented Sep 18, 2019

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

@imageslr
Copy link

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?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

10 participants