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
相关产品推荐
相关产品推荐

