Laravel では、複数のデータベーステーブル間の複雑なリレーションシップをナビゲートするのは困難な作業となる場合があります。この質問は、複数の中間テーブルが存在する場合にイベントに関連付けられた人物を取得するという課題を例示しています。
データベース スキーマは 4 つのテーブルで構成されています: イベント 、都市、会社、および人。 Event モデルは City と多対 1 の関係を持ち、City は Company およびイベント。 会社は個人と1対多の関係を持っています。
ネストされた関係クエリユーザーは個人を取得するクエリを必要としています は ID で イベント に登録しました。これを達成するには、都市と会社の関係をナビゲートする必要があります。
解決策簡単な解決策は、with メソッドを使用してネストされた関係を積極的に読み込むことです。return Event::with('city.companies.persons')->get();
イベント とそれに関連付けられた 都市 を取得します。 companies、および persons。
フィールドの選択persons テーブルの特定のフィールドのみが必要な場合。たとえば、 ID と名、クロージャを使用してクエリを変更します:
return Event::with(['city.companies.persons' => function ($query) { $query->select('id', 'firstname'); }])->get();
persons を取得します。
Eager Loading の回避Eager Loading が望ましくない場合は、whereHas メソッドを使用して、以下に基づいてクエリを制約できます。関連モデルの存在:return Event::whereHas('city.companies.persons', function ($query) { $query->where('company_id', $company_id); })->get();
会社に少なくとも 1 人の 人が関連付けられているイベント。
以上がLaravel で入れ子になった関係を処理する方法: イベントに関連付けられた人物を取得する?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。