从数据透视表中检索数据并分配到用户

时间:2018-01-27 00:20:05

标签: php mysql laravel eloquent

这可能是" Laravel 5.5"的错误方式,但我有一个数据透视表

buildings_users | building_id,user_id,first_name,last_name

users | id,first_name,last_name(不要问......)

buildings | id等...

应用\用户

public function buildings(){
   return $this->belongsToMany('App\Building');
}

应用\建筑

public function users(){
   return $this->hasMany('App\User');
}

如何从数据透视表而不是用户表输出first_name和last_name?

我试过

应用\用户

public function fullName(){

        $user = $this->select('bu.first_name','bu.last_name')->join('buildings_users as bu','bu.user_id','=','users.id')->where('bu.building_id','=',$this->current_building())->where('bu.user_id','=',$this->id)->first();

        if(!empty($user)):
            return $user;
        else:
            return array("first_name"=> "N/A","last_name"=>"");
        endif;

    }

当我使用$ user-> fullName() - > first_name&但是,last_name,我无法通过

进行延迟加载

$user->load('fullName')

因为我无法将EagerConstraints添加到Array"。

-

除了必须加入每个控制器查询实例之外,还应该做些什么才能获得我希望的功能..我真的必须有一个像buildings_users_names这样的新表...并将其用作另一种关系?

1 个答案:

答案 0 :(得分:2)

在声明这些模型之间的关系时,您可以指定数据透视表中的哪些字段可以访问:

应用\用户

public function buildings(){
    return $this->belongsToMany(App\Building::class)
            ->withPivot('first_name', 'last_name');
}

然后你可以像

一样使用它
@foreach($user->buildings as $building)
    <p>{{ $building->pivot->last_name }}, {{ $building->pivot->first_name }} </p>
@endforeach