web-dev-qa-db-ja.com

結合されたテーブルから列を選択する方法:laravel eloquent

this とは別の問題があります。シナリオは同じですが、結果をさらにフィルタリングする必要があります。

説明させてください。

テーブルが2つあるとしましょう

車両

_ id
 name
 staff_id
 distance
 mileage
_

スタッフ

_ id
 name
 designation
_

両方のテーブル(モデル)から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テーブルはフィルターされますが、Staffテーブルの結果は生成されません。

何か案は?

7
Anil P Babu

最後にそれを見つけた.. ->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、結合を実行できなかったため、スタッフテーブルのフィールドが表示されませんでした。

7
Anil P Babu

次のような通常の結合を使用できます。

Vehicle::join('staff','vehicles.staff_id','staff.id')
         ->select(
                  'vehicles.id',
                  'vehicles.name',
                  'staff.id as staff_id',
                  'staff.name'
          )
         ->get();

なぜなら、1つしか許可されていないので、結合で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();

ご理解いただければ幸いです。

3
Sagar Gautam

これを試して:

Vehicle::where('id',1)
    ->with(['staff'=> function($query){
        // selecting fields from staff table
        $query->select('id','name');
    }])
    ->get();
1
Maraboc