laravel中的命名公约规范及relation N+1问题

  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问题)

posted @ 2015-08-02 21:50  世有因果知因求果  阅读(696)  评论(0编辑  收藏  举报