this我遇到了另一个问题。情景相同,但我需要对结果进行更多过滤。
让我解释一下。
考虑我有2张桌子
车辆
id
name
staff_id
distance
mileage
人员
id
name
designation
我想从两个表(模型)中仅选择id
和name
。
车辆模型包含与员工模型的belongsTo
关系。
class Vehicle extends Model
{
public function staff()
{
return $this->belongsTo('App\Staff','staff_id');
}
}
我加入了这个
Vehicle::where('id',1)
->with(['staff'=> function($query){
// selecting fields from staff table
$query->select(['staff.id','staff.name']);
}])
->get();
当我在->get()
中添加字段
->get(['id','name'])
它过滤了vehicle
表,但没有产生Staff表的结果。
有什么想法吗?
答案 0 :(得分:3)
终于找到了..
在->get()
中,您必须将' staff_id'像这样
Vehicle::where('id',1)
->with(['staff'=> function($query){
// selecting fields from staff table
$query->select(['staff.id','staff.name']);
}])
->get(['id','name','staff_id']);
由于我没有使用staff_id
,因此无法执行加入,因此人员表字段未显示。
答案 1 :(得分:2)
您可以像这样使用普通连接:
Vehicle::join('staff','vehicles.staff_id','staff.id')
->select(
'vehicles.id',
'vehicles.name',
'staff.id as staff_id',
'staff.name'
)
->get();
因为,您无法在联接中同时使用id
,因为只允许一个。{1}}。因此,您可以将员工的身份标识为staff_id
。
您可以使用where子句添加vehicle id条件,如:
Vehicle::join('staff','vehicles.staff_id','staff.id')
->where('vehicle.id',1)
->select(
'vehicles.id',
'vehicles.name',
'staff.id as staff_id',
'staff.name'
)
->get();
希望你明白。
答案 2 :(得分:1)
试试这个:
Vehicle::where('id',1)
->with(['staff'=> function($query){
// selecting fields from staff table
$query->select('id','name');
}])
->get();
答案 3 :(得分:0)
我猜最简单快捷的方式是:
Vehicle::select('id','name','staff_id')->where('id',1)
->with('staff:id,name' )->get();
应该显示外键供选择。
从Laravel 5.7开始,您可以像这样使用with():
with('staff:id,name' )
用于粒度选择。