人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

Laravel で リレーション先のさらに先のリレーションの件数を取得する。検索条件にする。

● Laravel で リレーション先のさらに先のリレーションの件数を取得する

受診データ (hasOne) -> 患者 (hasMany)-> 担当医(複数)

こちらの例のように、リレーション先の患者にさらにリレーションで担当医が複数いる場合の担当医の数を取得します。

・普通に「受診データ」 + 「患者データリレーション」のみ取得する場合

$data_loop = $model->with('patient')->get();

 ↓ このように追加します

・普通に「受診データ」 +「患者データリレーション」+「担当医リレーション(データ)」を取得する場合

$data_loop = $model->with(['patient' => function($query){
    $query->with('doctors');
}])->get();

・普通に「受診データ」 +「患者データリレーション」+「担当医リレーション(の件数)」を取得する場合

$data_loop = $model->with(['patient' => function($query){
    $query->withCount('doctors');
}])->get();

● Laravel で リレーション先のさらに先のリレーションの件数を検索条件にする。

「doctors を2人以上持つ」「patient」のデータを取得する

$data_loop = $model->with(['patient' => function($query){
    $query->with('doctors');
}])->has('patient.doctors','>',1)get();
No.1539
06/27 23:24

edit