将ID和另一列做成PK
Make ID and another column into PK
我有一个 Stack
,里面有很多 StackRequiredParameter
。
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"`
}
但是上面returns下面的错误
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"`
}
我有一个 Stack
,里面有很多 StackRequiredParameter
。
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"`
}
但是上面returns下面的错误
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"`
}