如何在Laravel中正确合并多个集合

2022-08-30 15:06:06

我想将多个集合合并为一个。我确实有一个解决方案,如下所示:

$allItems = $collection1->merge($collection2)
                        ->merge($collection3)
                        ->merge($collection4)
                        ->merge($collection5);

这实际上确实有效,但是在部分或全部集合不包含对象的情况下,我遇到了问题。我收到一个类似于 .call to merge() on non object

我实际上试图创建所有集合的数组,然后迭代它们,同时检查它们的有效性,但它不起作用,我觉得它不是很优雅。

如何优雅地迭代合并多个集合的过程,同时考虑到部分或全部集合可能是空的或无效的?赞赏!


答案 1

我最终所做的是分离每个步骤。是合并链接扼杀了它,因为部分或全部集合可能是无效的。

$allItems = new \Illuminate\Database\Eloquent\Collection; //Create empty collection which we know has the merge() method
$allItems = $allItems->merge($collection1);
$allItems = $allItems->merge($collection2);
$allItems = $allItems->merge($collection3);
$allItems = $allItems->merge($collection4);

答案 2

我有同样的问题,所以我通过以下方式解决了它:

$clients = ClientAccount::query()->get();
$admins = AdminAccount::query()->get();

$users = collect($clients)->merge($admins)->merge($anotherCollection)->merge(...);

推荐