Laravel Eloquent 中 with() 函数只返回指定列

WBOY
Freigeben: 2016-06-20 12:35:49
Original
1451 Leute haben es durchsucht

Laravel 提供了 Eager Loading使用 with()方法来缓解 N+1 的问题,但是在实际使用中还是存在一些问题的, with()会直接查询出表中所有的字段,而我们可能仅仅需要其中指定的某几个字段。

假如我们现在有两张表: user和 posts,每个 User 可以拥有多个 Posts,而每一篇 Post 只能属于一个 User。下面分别是 User Model 和 Post Model 中定义的关系:

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

通过 with()方法,我们可以这样获取所有的 Posts 并同时查出对应的 User 信息,可以使用这样的方法:

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

这实际上会执行下面两句 SQL 语句:

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

但是我们可能并不需要 User 表中所有的字段,例如我们只需要 id和 username两个字段:

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

我们可以通过下面两种方法来实现。

方法一:在 with() 中指定

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

方法二:修改 Model 文件

修改 Post.php 文件中 user() 方法:

public function user(){    return $this->belongsTo('User')->select(array('id', 'username'));}
Nach dem Login kopieren
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage