2017-01-19 168 views
0

我想合并几个集合,但我无法做到这一点,出于任何原因。我的代码如下所示:Laravel合并收集失败?

$restaurant = \App\Restaurant::find(3); 
$images  = $restaurant->images; 
$userimages = $restaurant->userimages; 
$hours  = $restaurant->hours; 

$collectionMerge1 = $images->merge($userimages)->merge($hours); 
$collectionMerge2 = $restaurant->userimages->merge($hours)->merge($images); 
$collectionMerge3 = collect(array_merge($images->all(), $userimages->all(), $hours->all())); 

唯一可行的合并是最后一个合并。以前的不显示集合包含的所有项目。为什么是这样?我究竟做错了什么? 如果你看看图片,你会发现在合并1和2中有缺失的对象。我尝试了几种方法来做到这一点,但只能用于最后一个。也许合并方法有关键的问题?

enter image description here

回答

0

由于每个值实际上代表了一个正确的收集(通过关系建立的),你应该使用push而不是merge。这是因为merge实际上将覆盖某些元素时的密钥对已经匹配:

$aggregates = collect([]); 
$aggregates ->push($images)->push($userImages)->push($hours); 
dd($aggregates); //as expected 
+0

我试过,但是当你使用推,你不会在一个单一的一个合并的集合,而不是,你在做什么是添加更多的集合,而不是合并它们。 – suarsenegger