Laravel Eloquent 中 with() 函数只返回指定列
Jun 20, 2016 pm 12:35 PM
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');}
通过 with()方法,我们可以这样获取所有的 Posts 并同时查出对应的 User 信息,可以使用这样的方法:
public function getAllPosts() { return Post::with('user')->get();}
这实际上会执行下面两句 SQL 语句:
select * from `posts`select * from `users` where `users`.`id` in (<1>, <2>)
但是我们可能并不需要 User 表中所有的字段,例如我们只需要 id和 username两个字段:
select * from `posts`select id,username from `users` where `users`.`id` in (<1>, <2>)
我们可以通过下面两种方法来实现。
方法一:在 with() 中指定
Post::with(array('user'=>function($query){ $query->select('id','username');}))->get();
方法二:修改 Model 文件
修改 Post.php 文件中 user() 方法:
public function user(){ return $this->belongsTo('User')->select(array('id', 'username'));}

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

11 skrip pemendek URL terbaik PHP (percuma dan premium)

Bekerja dengan Data Sesi Flash di Laravel

Respons HTTP yang dipermudahkan dalam ujian Laravel

Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST

Bina aplikasi React dengan hujung belakang Laravel: Bahagian 2, React

12 skrip sembang php terbaik di codecanyon
