如何从联接表中 select 列:laravel eloquent
How to select columns from joined tables: laravel eloquent
我遇到的问题与 this 不同。场景相同,但我需要对结果进行更多过滤。
让我解释一下。
假设我有 2 tables
车辆
id
name
staff_id
distance
mileage
员工
id
name
designation
我只想 select 来自 tables(模特)的 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
table 但没有产生 Staff table 的结果。
有什么想法吗?
您可以像这样使用普通连接:
Vehicle::join('staff','vehicles.staff_id','staff.id')
->select(
'vehicles.id',
'vehicles.name',
'staff.id as staff_id',
'staff.name'
)
->get();
因为,您不能在联接中同时使用两个 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();
希望你明白。
终于找到了..
在 ->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
,因此无法执行加入,因此未显示员工 table 字段。
我想最短和更方便的方法是:
Vehicle::select('id','name','staff_id')->where('id',1)
->with('staff:id,name' )->get();
应提供外键以供选择。
因为 Laravel 5.7 你可以像这样使用 with() :
with('staff:id,name' )
用于粒度选择。
我遇到的问题与 this 不同。场景相同,但我需要对结果进行更多过滤。
让我解释一下。
假设我有 2 tables
车辆
id
name
staff_id
distance
mileage
员工
id
name
designation
我只想 select 来自 tables(模特)的 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
table 但没有产生 Staff table 的结果。
有什么想法吗?
您可以像这样使用普通连接:
Vehicle::join('staff','vehicles.staff_id','staff.id')
->select(
'vehicles.id',
'vehicles.name',
'staff.id as staff_id',
'staff.name'
)
->get();
因为,您不能在联接中同时使用两个 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();
希望你明白。
终于找到了..
在 ->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
,因此无法执行加入,因此未显示员工 table 字段。
我想最短和更方便的方法是:
Vehicle::select('id','name','staff_id')->where('id',1)
->with('staff:id,name' )->get();
应提供外键以供选择。
因为 Laravel 5.7 你可以像这样使用 with() :
with('staff:id,name' )
用于粒度选择。