如何在Laravel和Eloquent的数据透视表中为其他列添加关系?

时间:2016-10-06 00:50:05

标签: php laravel eloquent

我有3张桌子:

users
-id
-name

relation_types
-id
-type

user_relation
-user1_id
-user2_id
-relation_type_id

User模型中我有:

public function relatedParties()
    {
        return $this->belongsToMany('App\User', 'user_relation', 'user1_id', 'user2_id')->withPivot('relation_type_id');
    }

我可以通过relation_type_id获取App\User::find(1)->relatedParties[0]->pivot->relation_type_id

为了获得relation type而不是id,我在user_relation table

的模型中添加了此关系
public function type()
    {
        return $this->belongsTo('App\RelationType', 'relation_type_id');
    }

App\User::find(1)->relatedParties[0]->pivot->type会返回null

任何想法都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

您可以使用Nested Eager Loading

$user=User::with('relatedParties','relatedParties.type')->first();
foreach($user->relatedParties as $relatedParty)
{
   foreach($relatedParty->type as $type)
   {
         print_r($type->type);
   }
}

答案 1 :(得分:0)

您无法从数据透视表中访问类型,因为类型不是proviot表中的列。因此,访问类型的代码为访问类型提供了null。

App\User::find(1)->relatedParties[0]->pivot->type

user_relation表中的关系再次出现在relation_types,user_relation表之间,用户实现中无法调用user_relation表,user_relation。

获取" relation_type_id"的类型只需从relation_types表中获取类型,如下所示。

$relationTypeId = \App\User::find(3)->relatedParties[0]->pivot->relation_type_id;
$rtype = \App\RelationType::find($relationTypeId)->pluck('type');
echo $rtype;