将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"`
}