ホームページ > データベース > mysql チュートリアル > Laravel で入れ子になった関係を処理する方法: イベントに関連付けられた人物を取得する?

Laravel で入れ子になった関係を処理する方法: イベントに関連付けられた人物を取得する?

Linda Hamilton
リリース: 2024-11-27 20:13:14
オリジナル
680 人が閲覧しました

How to Handle Nested Relationships in Laravel: Retrieving Persons Associated with an Event?

Laravel ネストされたリレーションシップ: 複雑なデータベースクエリの分解

Laravel では、複数のデータベーステーブル間の複雑なリレーションシップをナビゲートするのは困難な作業となる場合があります。この質問は、複数の中間テーブルが存在する場合にイベントに関連付けられた人物を取得するという課題を例示しています。

データベース スキーマについて

データベース スキーマは 4 つのテーブルで構成されています: イベント都市会社、およびEvent モデルは City と多対 1 の関係を持ち、CityCompany およびイベント会社個人と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();
ログイン後にコピー
This変更されたクエリは、指定されたフィールドのみで

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート