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

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

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 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'));
}
}

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'));
}
}

5年前 评论

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

5年前 评论

延迟加载

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

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

5年前 评论
//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是长连接复用,但分析器,优化器,调用存储引擎接口还得走一遍。
能少查就少查吧,个人愚见。

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!