将多个集合合并到一个 symfony 中

问题描述 投票:0回答:1

(使用 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);

我该如何解决这个问题?

php symfony collections
1个回答
1
投票

您可以像这样合并集合(来自如何合并两个 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);

这可能会导致结果集合中多次出现相同的许可证实体。如果不需要,您可以向数组写入一些自定义过滤 - 或者只是创建一个存储库 getter 以根据用户 ID/用户搜索参数获取许可证...

© www.soinside.com 2019 - 2024. All rights reserved.