Laravel - 数据透视表上的附加关系

时间:2017-12-06 11:00:10

标签: php laravel eloquent

我有一个带2个键的常规数据透视表。但是,我还有一个第3列,我想存储一个具有一对多关系的不同键。这有可能吗?

示例:

数据透视表:
组织1 |组织2 |关系类型
1 | 2 | 1
1 | 3 | 2

在这种情况下,组织编号1与组织编号2的关系,关系类型为编号1.组织编号1也与组织编号3关系类型为2。

现在我的问题是,如何在数据透视表上设置额外的一对多关系?

1 个答案:

答案 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'); 

当然,我所假设的领域可能不存在,但希望你能得到这个想法。

相关问题