laravel中的命名公约规范及relation N+1问题
2015-08-02 21:50
676 查看
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问题)
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问题)
相关文章推荐
- laravel named route
- 请高手指点,PHP问题,解密出一个文件,不知道这个是什么用的,怎么使用,谢谢好友指点
- thinkphp下网站建设笔记
- thinkphp下网站建设笔记
- laravel创建新model数据的两种方法
- Ubuntu下搭建FTP服务器
- laravel小抄
- 70 thinkphp 模板解析与taglib
- 72 PHP 输出缓冲
- 71 PHP ob_start() 函数介绍(转)
- contentProvider_内容提供者
- php-mysql数据库
- CF_26A_AlmostPrime
- ContentProvider数据访问详解
- laravel中的$request对象构造及请求生命周期
- widows环境下配置NGIX+PHP服务器
- PHP开发调优clockwork工具
- 一个PHP开发者总结的九条建议
- Laravel资料总结
- 第一篇博文:PHP函数原型中的可选参数写法为什么这么写?