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問題)