You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在将集合数据传递至视图前检查关联数据?基于Eloquent关联的简化实现方案

优化Eloquent关联筛选的简写方法

当然有更简洁的实现方式啦!你可以直接利用Eloquent的关联查询能力,把筛选逻辑交给数据库来处理,完全不需要循环遍历或者array_push,代码更清爽,性能也更好。

这里有两种写法推荐给你:

基础写法(兼容所有支持闭包的Laravel版本)

public function awaiting() { 
    $producers_list = Producer::where('producer_process', 4)
        ->whereHas('brand', function ($query) {
            $query->where('brand_rejected', 0);
        })
        ->get();

    return view('admin.brands.awaiting', compact('producers_list')); 
}

箭头函数简写(Laravel 7+支持)

如果你的Laravel版本在7及以上,可以用更简洁的箭头函数进一步简化代码:

public function awaiting() { 
    $producers_list = Producer::where('producer_process', 4)
        ->whereHas('brand', fn($query) => $query->where('brand_rejected', 0))
        ->get();

    return view('admin.brands.awaiting', compact('producers_list')); 
}

为什么这样写更好?

  • 性能优化:原来的写法是先把所有producer_process=4的记录查出来,再在PHP里循环筛选关联的Brand条件;而whereHas是直接在数据库层面完成双重条件筛选,减少了数据传输和PHP的处理开销。
  • 代码可读性:直接通过链式调用表达业务逻辑,一眼就能看出来你要找的是「流程状态为4,且关联品牌未被拒绝」的生产者数据,比循环筛选更直观。

内容的提问来源于stack exchange,提问作者Pouya Vaghefi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 18:17:28