gpt4 book ai didi

go-gorm - 如何在 GORM 中引用复合主键?

转载 作者:行者123 更新时间:2023-12-02 16:29:52 27 4
gpt4 key购买 nike

Golang 的 GORM 库支持复合主键。但是如何从相关模型中引用它们呢?

例如,假设我有一个 User 和一个 Note 模型:

type User struct {
OrganizationID uint `gorm:"primaryKey; not null"`
Name string `gorm:"primaryKey; not null"`
}

type Note struct {
ID uint `gorm:"primaryKey; not null"`
OrganizationID uint `gorm:"not null"`
UserName string `gorm:"not null"`
User User
}

自动迁移器像这样创建 notes 表,但失败了:

CREATE TABLE "notes" ("id" bigserial NOT NULL,"user_name" text NOT NULL,"organization_id" bigint NOT NULL,PRIMARY KEY ("id"),
CONSTRAINT "fk_notes_user" FOREIGN KEY ("user_name") REFERENCES "users"("name"))

但我希望它改为这样做:

CONSTRAINT "fk_notes_user" FOREIGN KEY ("user_name", "organization_id") REFERENCES "users"("name", "organization_id")

我怎样才能做到这一点?

最佳答案

您可以使用ForeignKeyReferences 标签。在 docs 中提到了它们,尽管在相反的(一对多)上下文中。

type User struct {
OrganizationID uint `gorm:"primaryKey; not null"`
Name string `gorm:"primaryKey; not null"`
}

type Note struct {
ID uint `gorm:"primaryKey; not null"`
OrganizationID uint `gorm:"not null"`
UserName string `gorm:"not null"`
User User `gorm:"ForeignKey:OrganizationID,UserName;References:OrganizationID,Name"`
}

AutoMigrate 将生成以下 sql:

CREATE TABLE `users` (`organization_id` integer NOT NULL,`name` text NOT NULL,PRIMARY KEY (`organization_id`,`name`))

CREATE TABLE `notes` (`id` integer NOT NULL,`organization_id` integer NOT NULL,`user_name` text NOT NULL,PRIMARY KEY (`id`),CONSTRAINT `fk_notes_user` FOREIGN KEY (`organization_id`,`user_name`) REFERENCES `users`(`organization_id`,`name`))

关于go-gorm - 如何在 GORM 中引用复合主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63726170/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com