ホームページ  >  記事  >  バックエンド開発  >  Laravel Eloquent の with() 関数は指定された列のみを返します

Laravel Eloquent の with() 関数は指定された列のみを返します

WBOY
WBOYオリジナル
2016-06-20 12:35:491451ブラウズ

Laravel は N+1 問題を軽減するために with() メソッドを使用した Eager Loading を提供しますが、実際の使用にはまだいくつかの問題があります。 with() はテーブル内のすべてのフィールドを直接クエリします。その中で指定された特定のフィールドのみが必要な場合があります。

ここで、ユーザーと投稿という 2 つのテーブルがあるとします。各ユーザーは複数の投稿を持つことができ、各投稿は 1 人のユーザーにのみ属することができます。ユーザーモデルと投稿モデルで定義されている関係は次のとおりです:

// User.php public function post(){    return $this->hasMany('post');}// Post.phppublic function user(){    return $this->belongsTo('user');}

with() メソッドを通じて、すべての投稿を取得し、同時に対応するユーザー情報を見つけることができます。このメソッド:

public function getAllPosts() {    return Post::with('user')->get();}

これは実際に次の 2 つの SQL ステートメントを実行します:

select * from `posts`select * from `users` where `users`.`id` in (<1>, <2>)

ただし、User テーブルのすべてのフィールドは必要ない場合があります。たとえば、必要なのは User テーブル内のフィールドだけです。 id と username フィールド:

select * from `posts`select id,username from `users` where `users`.`id` in (<1>, <2>)

これは、次の 2 つの方法で実現できます。

方法 1:

Post::with(array('user'=>function($query){    $query->select('id','username');}))->get();

方法 2: モデル ファイルを変更します

Post.php ファイルの user() メソッドを変更します:

public function user(){    return $this->belongsTo('User')->select(array('id', 'username'));}
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。