gorm create时 id为空
时间: 2023-08-04 15:21:00 浏览: 287
如果在使用 GORM 的 `Create` 方法创建数据时,没有设置主键 `ID` 的值,那么 GORM 会根据数据库的设置或者默认规则生成主键的值,例如自增或者 UUID 等。如果你的数据库设置了自增主键,你可以在创建数据时不设置主键 `ID` 的值,例如:
```go
user := User{
Name: "Alice",
Age: 18,
}
db.Create(&user)
```
这样,GORM 会自动将主键值设置为下一个可用的自增值。如果你的数据库没有设置自增主键,或者你想手动指定主键值,可以在创建数据时设置主键 `ID` 的值,例如:
```go
user := User{
ID: 1001,
Name: "Alice",
Age: 18,
}
db.Create(&user)
```
这样,GORM 会将主键值设置为 1001。如果手动指定的主键值已经存在于数据库中,则会报错。
相关问题
gorm create时 id
在 GORM 的模型中,如果字段名为 "ID",则默认会作为主键。在使用 `Create` 方法创建数据时,如果没有指定主键的值,GORM 会自动生成一个唯一的 UUID 作为主键。如果你想手动指定主键的值,可以在创建时设置 ID 字段的值,例如:
```go
user := User{
ID: 1001,
Name: "Alice",
Age: 18,
}
db.Create(&user)
```
这样就会创建一个 ID 为 1001 的用户。但需要注意的是,如果手动指定的主键值已经存在于数据库中,则会报错。
数据库字段类型为 json 的字段默认值为 json_array(),gorm create 插入数据 , 没填值会被插入 null,该怎么让它是默认值呢
在 GORM 中,你可以使用结构体的默认值来设置数据库字段的默认值。比如,你可以为结构体中的 json 字段设置一个默认值,然后在插入数据时,如果该字段没有被填充,则会使用默认值。
以下是一个示例代码:
```go
type MyModel struct {
ID uint `gorm:"primaryKey"`
Data map[string]interface{} `gorm:"type:json;default:json_array()"`
}
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// 自动迁移 schema
db.AutoMigrate(&MyModel{})
// 创建一条记录,不填 Data 字段
db.Create(&MyModel{})
// 查看记录,发现 Data 字段已经被设置为默认值
var m MyModel
db.First(&m)
fmt.Println(m.Data)
}
```
在上面的代码中,我们定义了一个名为 `MyModel` 的结构体,其中包含一个名为 `Data` 的字段,它的类型为 `map[string]interface{}`,并且设置了默认值为 `json_array()`。然后,我们使用 `db.Create()` 方法创建一条记录,不填 `Data` 字段。最后,我们使用 `db.First()` 方法查看该记录,发现 `Data` 字段已经被设置为默认值。
需要注意的是,如果使用 MySQL 数据库,需要将默认值设置为 `[]`,而不是 `json_array()`。因为 MySQL 不支持 `json_array()` 函数。
阅读全文