Golang Gorm 没有创建 table 有约束
Golang Gorm not creating table with constraints
我正在使用 Gorm 开发 Gin 应用程序。目前,我有以下代表模型的结构:
// Category represents a category object in the database
type Category struct {
Name string `json:"name" gorm:"size:60,unique,not null"`
Description string `json:"description" gorm:"size:120"`
Parent uint `json:"parent"`
Active bool `json:"active" gorm:"default:true"`
gorm.Model
}
如您所见,有一些约束,例如 size
、unique
和 not null
。
当我运行迁移
db.AutoMigrate(&entities.Category{})
table 实际上是创建的,但没有指定的约束。
检查 table 的 DDL,这是它的创建方式:
CREATE TABLE `categories` (
`name` longtext DEFAULT NULL,
`description` varchar(120) DEFAULT NULL,
`parent` int(10) unsigned DEFAULT NULL,
`active` tinyint(1) DEFAULT 1,
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`deleted_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_categories_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
知道我做错了什么吗?
基于 doc,我认为您应该在标记约束声明
之间使用分号 (;
) 而不是逗号 (,
)
type Category struct {
Name string `json:"name" gorm:"size:60;unique;not null"`
Description string `json:"description" gorm:"size:120"`
Parent uint `json:"parent"`
Active bool `json:"active" gorm:"default:true"`
gorm.Model
}
我正在使用 Gorm 开发 Gin 应用程序。目前,我有以下代表模型的结构:
// Category represents a category object in the database
type Category struct {
Name string `json:"name" gorm:"size:60,unique,not null"`
Description string `json:"description" gorm:"size:120"`
Parent uint `json:"parent"`
Active bool `json:"active" gorm:"default:true"`
gorm.Model
}
如您所见,有一些约束,例如 size
、unique
和 not null
。
当我运行迁移
db.AutoMigrate(&entities.Category{})
table 实际上是创建的,但没有指定的约束。 检查 table 的 DDL,这是它的创建方式:
CREATE TABLE `categories` (
`name` longtext DEFAULT NULL,
`description` varchar(120) DEFAULT NULL,
`parent` int(10) unsigned DEFAULT NULL,
`active` tinyint(1) DEFAULT 1,
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`deleted_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_categories_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
知道我做错了什么吗?
基于 doc,我认为您应该在标记约束声明
之间使用分号 (;
) 而不是逗号 (,
)
type Category struct {
Name string `json:"name" gorm:"size:60;unique;not null"`
Description string `json:"description" gorm:"size:120"`
Parent uint `json:"parent"`
Active bool `json:"active" gorm:"default:true"`
gorm.Model
}