Eloquent の "With()" 関数を使用して関連テーブルから特定の列を取得する
Eloquent の "with()" 関数を使用して結合を実行する場合、関連テーブルから特定の列を取得することができます。これは、結合テーブルから列のサブセットのみが必要なシナリオで役立ちます。
問題:
User と Post という 2 つのテーブルがあるシナリオを考えてみましょう。 1 人のユーザーが複数の投稿を持つことができ、各投稿は 1 人のユーザーに属します。
初期アプローチ:
デフォルトの "with('user')" 構文を使用すると、次のクエリが実行されます:
select * from `posts` select * from `users` where `users`.`id` in (<1>, <2>)
ただし、" 「id」や「username」などの「users」テーブルの場合、上記のアプローチは適用されません。
解決策 I: "with()" の 2 番目の引数として配列を使用する:
"with()" の 2 番目の引数として配列を渡す関連テーブルから取得する列を指定できます。ただし、この方法は最初のテーブルの列を指定する場合にのみ機能します。
解決策 II: "with()" の 2 番目の引数としてクロージャを使用する:
To 2 番目のテーブルから特定の列を取得するには、「with()」配列の 2 番目の引数としてクロージャー関数を使用します。この手法を使用すると、列を選択するためのカスタム ロジックを実装できます。
Post::query() ->with(['user' => function ($query) { $query->select('id', 'username'); }]) ->get()
この手法では、次のクエリが実行されます。
select * from `posts` select id, username from `users` where `users`.`id` in (<1>, <2>)
注:目的のテーブルを取得するには、関連テーブルのキー (この例では「id」) を $query->select() の最初のパラメータにする必要があります。結果。
以上がEloquent の `with()` 関数を使用して関連テーブルから特定の列を選択する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。