这可能是" 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这样的新表...并将其用作另一种关系?
答案 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