laravel中關聯模型查詢選擇性的字段

在使用 Laravel 的關聯查詢中,咱們常用 with 方法來避免 1+N 查詢,可是 with 會將目標關聯的全部字段所有查詢出來,對於有強迫症的PHPer來講,固然是不容許發生的。

第一種方法:在模型裏就寫好,固定死

方便簡潔,可是不能針對不一樣的需求去關聯不一樣的字段,一旦在模型關聯中寫死,全部的關聯的字段都是同樣的函數

在user模型裏,寫關聯函數,一對多。此模型放在APP\Models下,默認放在App下post

1 public function hasPost(){ 2 return $this->hasMany('App\Models\post','外鍵','主鍵')->select('id','content','title'); 3 }

第二種方法:能夠在寫查詢的過程當中指定須要關聯的字段

這種方法比較自由,是在各自的邏輯控制器裏實現,比較自由this

1 public function test(User $user) 2 { 3     $return_datas  = $user->with(['hasPost'=>function($query){ 4                                         $query-select('主鍵','外鍵','content','title'); 5                                      }) ->get(); 6 }

 

第三種方法:利用 Laravel 的查詢範圍將其封裝起來:定義一個基礎模型baseModel,而後全部的模型都繼承自基礎模型baseModel,或者使用trait

在基礎模型裏spa

1 class BaseModel extends \Eloquent{ 2     public function scopeWithOnly($query, $relation, Array $columns) 3  { 4         return $query->with([$relation => function ($query) use ($columns){ 5             $query->select(array_merge(['id'], $columns)); 6  }]); 7  } 8 }

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

1 class User extends BaseModel{ 2     public function hasPost() 3  { 4          return $this->hasMany('App\Models\post') 5  } 6 }

再接着邏輯實現本身想要的blog

1 1 public function test(User $user) 2 2 { 3 3     $return_datas  = $user->with(['hasPost',['字段1','字段2',.....]) ->get(); 4 6 }
相關文章
相關標籤/搜索