这一小节中第三步做完后也存在 N+1 查询的问题

这一小节中第三步做完后也存在 N+1 查询的问题

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5

我是这样处理的

class CategoriesController extends Controller
{
public function show(Category $category)
{
// 读取分类 ID 关联的话题,并按每 20 条分页
$topics = Topic::with('user', 'category')->where('category_id', $category->id)->paginate(20);
// 传参变量话题和分类到模板中
return view('topics.index', compact('topics', 'category'));
}
}

7年前 评论

我是这样处理的

class CategoriesController extends Controller
{
public function show(Category $category)
{
// 读取分类 ID 关联的话题,并按每 20 条分页
$topics = Topic::with('user', 'category')->where('category_id', $category->id)->paginate(20);
// 传参变量话题和分类到模板中
return view('topics.index', compact('topics', 'category'));
}
}

7年前 评论

下一节会解决这个问题的😄

6年前 评论

延迟加载

$topics = Topic::where('category_id', $category->id)->paginate(20);

$topics->load(['user', 'category']);

6年前 评论
//CategoriesController:
$topics = Topic::where('category_id', $category->id)->with('user'')->paginate(20);

//topics._topic_list.blade.php:
@foreach ($topics as $topic)
    @php($category ?? $category = $topic->category)

category 默认的查询实例直接拿来用,由于和 topics.index 共用模板,所以再加个判断就行。
虽然只是多一次根据主键的 in 查询,但 php 效率比 mysql 快多了,orm 是长连接复用,但分析器,优化器,调用存储引擎接口还得走一遍。
能少查就少查吧,个人愚见。

4年前 评论