《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
如果user表关联了profile表,n+1大概就是在循环里面查关联这样吧
避免n+1用
$users = User::query()->with('profile')->get()
,先加载一下关联模型,with只会执行两次查询,一个select * from user
,一个select * from profile id in ($user->pluck('id'))
这个问题应该是
预加载
的问题, 在模型 Model
中建立一对多
或多对多
的关系, 使用预加载 with
可以起到优化Sql的作用.如何优化的呢, 看下小demo.
打印出来的日志, 分别是
上面结果是
1+10
哦豁
, 这个结果是1+1
, 噢啦以常用的列表分页查询为例:假设查询A表返回了N条数据,同时需要关联另一个表B的数据。原始的方法是循环遍历A表的N条数据,查询关联的B表数据,产生了N+1条语句。
避免这个问题可以直接使用laravel的with方法,本质上是使用一条whereIn代替N次查询。