laravel中的命名公約規範及relation N+1問題

世有因果知因求果發表於2015-08-02

  User: model  ;  users: 表名; user_id 鍵值    

relation: public function tasks(){return $this->belongsToMany('Task','task_id');}

  Task: model名; tasks:表名; task_id  鍵值

relation: public function ower(){return $this->belongsToMany('User','user_id');} //注意:預設情況下如果不指定鍵欄位,則會使用owner_id作為鍵

 $user = User::first();

$user->tasks()->attach(2); 將會對relation執行操作

 

Task::where('title','LIKE',"%$searchdata%")->get()   全文搜尋

 

在laravel relation操作中,如果對有多條資料的行,執行relation關係表運算,則由於會多次查詢資料庫,將嚴重影響系統效能。比如,一個可行的方法是 eager oading.

比如上述關係中,如果有10個user,分別要顯示

@foreach($tasks as $task)

<li><strong>{{$task->owner->name}}</strong> 有以下任務{{$task->title}}</li>

@endforeach

可以將PHP程式碼稍微改進一次性獲取資料集後傳入blade模版,

$tasks  = Task::with('owner')->get();  通過這一句話的修改,laravel訪問資料庫將減少為1次,而不是11次!!(N+1問題)

相關文章