将两个查询结果,根据某个字段合并,有什么更优雅的方式么
我现在的做法是这样的,定义了两个数组模拟模型查询结果
$counts=collect([['id'=>2,'count'=>10],['id'=>3,'count'=>15]]);
$names=collect([['id'=>1,'name'=>'张三'],['id'=>2,'name'=>'李四'],['id'=>3,'name'=>'王五']]);
/** 根据 KEY字段 合并两个集合
* @param {*} $key 字段名
* @param {*} $collect1 集合1,完全保留
* @param {*} $collect2 集合2,仅保留集合1中有该KEY的元素
* @return {*} 合并后结果
*/
function CollectMerge($key,$collect1,$collect2)
{
$arr1=$collect1->keyBy($key)->toArray();
$arr2=$collect2->keyBy($key)->toArray();
$result=array_map(function($item) use($arr2,$key){
return array_merge($item,$arr2[$item[$key]]);
},$arr1);
return array_values($result);
}
dd(CollectMerge('id',$counts,$names));
打印结果
array:2 [
0 => array:3 [
"id" => 2
"count" => 10
"name" => "李四"
]
1 => array:3 [
"id" => 3
"count" => 15
"name" => "王五"
]
]
该方法虽然有效,但总感觉不是最优解,希望大佬们给指正下
连表查询
这样效果好像也一样