我有一个带2个键的常规数据透视表。但是,我还有一个第3列,我想存储一个具有一对多关系的不同键。这有可能吗?
示例:
数据透视表:
组织1 |组织2 |关系类型
1 | 2 | 1
1 | 3 | 2
在这种情况下,组织编号1与组织编号2的关系,关系类型为编号1.组织编号1也与组织编号3关系类型为2。
现在我的问题是,如何在数据透视表上设置额外的一对多关系?
答案 0 :(得分:1)
你在这里有一个三元关系。您是说组织A与组织B和关系类型相关。这是一个非常罕见的用例,因为在绝大多数情况下,三元关系可以简化为二元关系。您需要对数据模型进行非常深入的检查,以确定您的案例是否可以简化,但假设这不是我的建议。
值得检查the eloquent docs,特别是定义自定义中间表模型。请注意,这需要使用Laravel 5.4+。
以下内容应该有效:
class OrganisationOrganisationLink extends Pivot {
public relationType() {
return $this->belongsTo(RelationType::class); //You need to specify the foreign key correctly as a 2nd parameter
}
}
然后在原始模型中:
class Organisation extends Model {
public relatedOrganisation() {
return $this->belongsToMany(self::class)->using(OrganisationOrganisationLink::class);
}
}
然后,当实际使用它时,你可以例如做:
$organisation = Organisation::with('relatedOrganisation')->first();
echo "Got ".$organisation->name." which relates to "
.$organisation->relatedOrganisation->first()->name
." with relationship type "
$organisation->relatedOrganisation->first()->pivot->relationshipType()->value('name');
当然,我所假设的领域可能不存在,但希望你能得到这个想法。