Laravel 合并集合失败?

sua*_*ger 4 collections merge laravel laravel-5.2

我正在尝试合并多个集合,但由于任何原因我无法执行此操作。我的代码看起来像这样:

$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()));
Run Code Online (Sandbox Code Playgroud)

唯一有效的合并是最后一个。前面的没有显示集合包含的所有项目。为什么是这样?我究竟做错了什么?如果您查看图片,您会发现合并 1 和合并 2 中缺少对象。我尝试了多种方法来做到这一点,但只适用于最后一种。也许合并方法有密钥问题?

在此处输入图片说明

mrh*_*rhn 5

一般来说,我觉得合并有很多陷阱,我认为(在你的情况下)当你以某种方式试图将键值数组或concat索引数组合并在一起时,大多数问题都会出现。我对这个问题的解决方案是使用concat而不是合并。Concat将另一个集合或数组添加到当前的末尾。所以你不会遇到奇怪的情况,如图所示。

$images->concat($userimages)->concat($hours);
Run Code Online (Sandbox Code Playgroud)


Ohg*_*why 1

鉴于您的每个值实际上代表一个适当的集合(通过关系建立),您应该使用push而不是merge. 这是因为merge当密钥对已经匹配时实际上会覆盖某些元素:

$aggregates = collect([]);
$aggregates ->push($images)->push($userImages)->push($hours);
dd($aggregates ); //as expected
Run Code Online (Sandbox Code Playgroud)