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

Laravel 5.5:如何从两个Eloquent查询集合创建新集合

合并两个Eloquent集合的几种方法

嘿,我来帮你搞定这两个集合的合并问题~根据你的需求不同,有几种不同的实现方式,我给你一一拆解:

1. 按位置一一合并元素(假设两个集合顺序对应)

如果你的$training_sessions和$users_count是按顺序一一对应的(比如第一个培训场次对应第一个用户统计数据),可以用zip+map的组合:

$mergedCollection = $training_sessions->zip($users_count)->map(function ($pair) {
    // 把每一对中的培训场次数据和用户统计数据合并成一个对象
    return $pair[0]->merge($pair[1]);
});

这样处理后,每个培训场次对象里会直接带上对应的用户统计字段。

2. 通过关联字段匹配合并(比如按培训场次ID关联)

如果两个集合是通过某个共同字段关联的(比如$users_count里有对应培训场次的id或session_id),那先把用户统计集合转成以关联字段为键的映射,再遍历添加字段会更稳妥:

// 先把用户统计集合转换为「场次ID => 用户数量」的映射集合
$usersCountMap = $users_count->pluck('users_count', 'session_id'); // 这里的字段名根据你的实际数据调整

// 遍历培训场次集合,给每个场次添加对应的用户数字段
$mergedCollection = $training_sessions->map(function ($session) use ($usersCountMap) {
    // 用get方法可以设置默认值,避免找不到对应数据时出现null
    $session->users_count = $usersCountMap->get($session->id, 0);
    return $session;
});

3. 简单合并成一个包含所有元素的大集合

如果你只是想把两个集合的所有元素放在同一个集合里(不是把元素合并,而是集合的元素相加),直接用merge方法就行:

$mergedCollection = $training_sessions->merge($users_count);

你可以根据自己的实际业务场景选择合适的方法~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:20:42