如何从联接表中 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(模特)的 idname。 车辆模型包含与员工模型的 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' )

用于粒度选择。