Объединение множества коллекций в одном symfony - PullRequest
0 голосов
/ 21 мая 2019

(с использованием 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 Ответ

1 голос
/ 21 мая 2019

Вы можете объединить коллекции следующим образом (из Как объединить две 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);

Это может привести к тому, что один и тот же объект лицензии будет получен в результирующей коллекции несколько раз.Если это не нужно, вы можете написать некоторую пользовательскую фильтрацию в массив - или просто создать средство получения хранилища для получения лицензий на основе идентификаторов пользователя / параметров поиска пользователя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...