Ani*_*abu 5 php laravel eloquent laravel-eloquent
我有一个与此不同的问题。情况是相同的,但我需要对结果进行更多过滤。
让我解释。
考虑我有2张桌子
车辆
id
name
staff_id
distance
mileage
Run Code Online (Sandbox Code Playgroud)
员工
id
name
designation
Run Code Online (Sandbox Code Playgroud)
我只想选择,id并且name要从两个表(模型)中选择。车辆模型包含belongsTo与职员模型的关系。
class Vehicle extends Model
{
public function staff()
{
return $this->belongsTo('App\Staff','staff_id');
}
}
Run Code Online (Sandbox Code Playgroud)
我加入了这个
Vehicle::where('id',1)
->with(['staff'=> function($query){
// selecting fields from staff table
$query->select(['staff.id','staff.name']);
}])
->get();
Run Code Online (Sandbox Code Playgroud)
当我->get()像这样放置字段时
->get(['id','name'])
Run Code Online (Sandbox Code Playgroud)
它过滤vehicle表,但不产生Staff表的结果。
有任何想法吗?
您可以像这样使用普通连接:
Vehicle::join('staff','vehicles.staff_id','staff.id')
->select(
'vehicles.id',
'vehicles.name',
'staff.id as staff_id',
'staff.name'
)
->get();
Run Code Online (Sandbox Code Playgroud)
因为,你不能id在一个连接中同时使用这两个,因为只允许一个。因此,您可以将员工的 id 设为staff_id。
您可以使用 where 子句添加车辆 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();
Run Code Online (Sandbox Code Playgroud)
希望你能理解。
终于找到它了。在中,->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']);
Run Code Online (Sandbox Code Playgroud)
由于我没有使用staff_id,所以它无法执行联接,因此不会显示人员表字段。
| 归档时间: |
|
| 查看次数: |
9898 次 |
| 最近记录: |