在一个symfony中合并多个集合

时间:2019-05-21 14:34:31

标签: symfony collections

(使用Symfony 3.4)

我试图通过合并(仅获取对象)多个集合来创建数组集合。听起来很怪异,让我解释一下。

我从数据库中取出所有用户,对于每个用户,我想将其所有许可证添加到一个阵列集合中。我的代码:

 $users = $this->userRepository->findAllUsers($params);

 $users->forAll(function (User $user) use (&$array) {
     $array = array_merge($array, $user->getLicenses());
 });

 $a = new ArrayCollection($array);

我应该如何解决?

1 个答案:

答案 0 :(得分:1)

您可以合并这样的集合(来自How to merge two php Doctrine 2 ArrayCollection()):

$collection3 = new ArrayCollection(
    array_merge($collection1->toArray(), $collection2->toArray())
);

这样可以应用于您的案例:

$users = $this->userRepository->findAllUsers($params);
$licensesArray = [];

foreach ($user in $users) {
    $licensesArray = array_merge($licencesArray, $user->getLicenses()->toArray());
});

$licenses = new ArrayCollection($licensesArray);

这可能导致结果集合中多次具有相同的许可证实体。如果不希望这样做,则可以向该数组编写一些自定义过滤-或仅创建一个存储库获取程序以根据用户ID /用户搜索参数获取许可证...