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 中缺少对象。我尝试了多种方法来做到这一点,但只适用于最后一种。也许合并方法有密钥问题?
一般来说,我觉得合并有很多陷阱,我认为(在你的情况下)当你以某种方式试图将键值数组或concat索引数组合并在一起时,大多数问题都会出现。我对这个问题的解决方案是使用concat而不是合并。Concat将另一个集合或数组添加到当前的末尾。所以你不会遇到奇怪的情况,如图所示。
$images->concat($userimages)->concat($hours);
Run Code Online (Sandbox Code Playgroud)
鉴于您的每个值实际上代表一个适当的集合(通过关系建立),您应该使用push而不是merge. 这是因为merge当密钥对已经匹配时实际上会覆盖某些元素:
$aggregates = collect([]);
$aggregates ->push($images)->push($userImages)->push($hours);
dd($aggregates ); //as expected
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3648 次 |
| 最近记录: |