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

Laravel集合在each遍历中调用union方法无法插入新集合问题

问题原因

你误用了Laravel Collection的union()方法,该方法的合并逻辑和PHP原生数组的+运算符完全一致:仅保留原集合中不存在的键对应的元素,相同键名的元素会直接被忽略,不会覆盖也不会追加。
你每次筛选得到的$_availabaleSlices都是单元素集合,元素的索引均为0。第一次合并后slices集合已经存在索引为0的元素,第二次合并时新集合的索引0已存在,所以第二条记录直接被丢弃,最终仅保留第一条数据。

解决方法

你需要的是忽略原有索引,直接追加新集合的所有元素,可以替换为以下任意一种方案:

方案1:使用concat()方法(推荐)

concat()方法会忽略集合的原有索引,将新集合的所有元素追加到原集合末尾,完全符合你的需求,只需修改对应行即可:

$slices = $slices->concat($_availabaleSlices);

方案2:使用merge()方法

对于数字索引的集合,merge()方法同样会自动重排索引、追加新元素,效果和concat()一致:

$slices = $slices->merge($_availabaleSlices);

方案3:更简洁的写法(无需手动声明集合+遍历)

直接用flatMap替代each,可以省略手动初始化集合、合并的步骤,代码更简洁易读:

$slices = Means::whereIn('id', $meansId)
    ->get()
    ->flatMap(function ($mean) use ($weight) {
        return $mean->slices()
            ->betweenWeight($weight)
            ->get();
    });

dd('RESULTS', $slices->toArray());

内容的提问来源于stack exchange,提问作者Stanislas Poisson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:45:05