laravel with 渴求式加載指定字段


在使用 Laravel 的關聯查詢中,我們經常使用 with 方法來避免 N+1 查詢,但是 with 會將目標關聯的所有字段全部查詢出來,對於有強迫症的我們來說,當然是不允許的。

這時候我們可以使用下面的技巧在使用 with 時只查詢目標關聯的部分字段:

$topics = Topic::limit(2)->with(['user'=>function($query){ $query->select('id','username'); }])->get(); 

但是每次查詢都寫得這么繁瑣真的好么?不如利用 Laravel 的范圍查詢將其封裝起來:

在 Model 基類中定義一個范圍查詢

class BaseModel extends \Eloquent{ public function scopeWithCertain($query, $relation, Array $columns) { return $query->with([$relation => function ($query) use ($columns){ $query->select(array_merge(['id'], $columns)); }]); } } 

在我們普通的 Model 類都繼承基類:

class Topic extends BaseModel{ public function user() { return $this->belongsTo('User'); } } 

然后使用就很方便了:

$topics = Topic::limit(2)->withCertain('user', ['username'])->get();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM