我有一个有许多StackRequiredParameter
的Stack
。
StackRequiredParameter
通过其名称来识别,但多个堆栈可以具有相同名称的参数。因此,PK是它的名称和它所属的堆栈的id的组合。
type StackRequiredParameter struct {
ID string `gorm:"uniqueIndex:idx_required_id_unique_per_stack"`
StackID uint `gorm:"uniqueIndex:idx_required_id_unique_per_stack"`
}
我已经尝试实现Stack
如下所示。
type Stack struct {
gorm.Model
Name string `gorm:"unique"`
RequiredParameters []StackRequiredParameter `gorm:"foreignKey:ID,StackID; references:ID; constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"requiredParameters,omitempty"`
}
但是上面的代码返回以下错误
panic: runtime error: index out of range [1] with length 1
我很确定我得到这个错误,因为我试图匹配一个复合键(ID, StackID)与堆栈的ID。但如果我在这里发布的信息不够多,请告诉我。
问题是,我不知道该怎么做。
问题是外键和引用应该包含相等的列
type Stack struct {
gorm.Model
Name string `gorm:"unique"`
RequiredParameters []StackRequiredParameter `gorm:"many2many:required_stack_parameters_joins; foreignKey:ID; joinForeignKey:StackID; References:Name; joinReferences:ParameterID; constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"requiredParameters,omitempty"`
}
type StackRequiredParameter struct {
Name string `gorm:"primaryKey"`
}