有关于laravel中的N+1问题.

如图,如果我按照以下方式写查询.

2017-11-09 10-16-46屏幕截图.png

我在Topic对象下执行了分页并且每页30个对象.

该项目下topic对象和category对象是对应的关系.且是一对多.

我这样传递参数到视图那么会发生什么呢.

2017-11-10 15-09-47屏幕截图.png

可以看到执行了几乎60次查询,这样大大拖慢的查询的速度,如果项目变大的话,会越来越臃肿.这就是n+1问题

为了拿到catagory和topic的关系几乎每次都要查询一下category表造成了大量的重复查询.如果我第一次查询出来的是 N 条记录,那么最终需要执行的 SQL 语句就是 N+1 次

解决方式如下,取出数据对象时进行预加载

pulib function index()

{

$topics=Topic::with('category')->paginate(15);

return view('topics.index')->withTopics($topics);

}

这样就可以防止多余的SQL查询

日记本

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容