我有一个带 2 个键的常规数据透视表。但是,我还有第三列,我想在其中存储具有一对多关系的不同密钥。这可能有吗?
Example:
数据透视表:
组织1 |组织2 |关系类型
1 | 2 | 1
1 | 3 | 2
在本例中,组织编号 1 与组织编号 2 存在关系,关系类型为编号 1。组织编号 1 还与组织编号 3 存在关系,关系类型为 2。
现在我的问题是,如何在数据透视表上设置额外的一对多关系?
这里有一个三元关系。您是说组织 A 与组织 B 和关系类型相关。这是一个非常不常见的用例,因为在绝大多数情况下,三元关系可以简化为二元关系。您需要对数据模型进行非常深入的检查,以确定您的案例是否可以简化,但假设不能,这是我的建议。
值得检查一下雄辩的文档特别是在定义自定义中间表模型为了这。请注意,这需要 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');
当然,我假设的字段可能不存在,但希望您能明白。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)