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

Laravel查询指定ID集合的stock记录,无匹配时返回0用于datatable展示

解决方案

核心思路是先把符合条件的库存记录映射为ID为键的查找数组,再遍历你需要输出的全部ID数组,逐个匹配取值,无匹配则取0,保证所有ID都有对应输出,顺序和原ID数组完全一致。

修改后的Blade代码

<td class="border-t border-gray-200 border-dashed">
    @php
        $paperorderids = [];
        $paperorder = $item->paperorders->where('paperorder_id', $item->id);
        foreach ($paperorder as $key => $value) {
            $paperorderids[] = $value->id;
        }
        
        // 把符合条件的库存转为[paperorder_papers_id => qty]的映射数组
        $stockMap = $item->stocks
            ->where('status', 'qc-pass')
            ->whereIn('paperorder_papers_id', $paperorderids)
            ->keyBy('paperorder_papers_id')
            ->map(fn($stock) => $stock->qty ?? 0)
            ->toArray();
    @endphp

    @foreach($paperorderids as $id)
        <span class="flex items-center px-6 py-0 text-gray-700">
            {{ $stockMap[$id] ?? 0 }}
        </span>
    @endforeach
</td>

代码说明

  • 使用Laravel集合的keyBy方法,把符合条件的库存记录以paperorder_papers_id为键重组,查找效率远高于嵌套循环
  • 直接遍历你需要展示的所有ID数组,保证每个ID都有对应的输出项,不会出现缺失
  • 用?? 0做默认值兜底,不管是记录不存在还是qty为空,都统一展示0

优化建议

建议把这部分数据处理逻辑移到控制器中完成,Blade模板只负责渲染最终数据,代码可维护性更高。

内容的提问来源于stack exchange,提问作者Madushan Serasinghe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:15:03