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テーブルの結果は生成されません。
何か案は?
最後にそれを見つけた.. ->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
、結合を実行できなかったため、スタッフテーブルのフィールドが表示されませんでした。
次のような通常の結合を使用できます。
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();
ご理解いただければ幸いです。
これを試して:
Vehicle::where('id',1)
->with(['staff'=> function($query){
// selecting fields from staff table
$query->select('id','name');
}])
->get();