0

(using Symfony 3.4)

I am trying to create an array collection by merging (getting only the objects) multiple collections. Sounds weird, let me explain.

I take all the users from the db and for each one I want to add in a single array collection all his/her licenses. My code:

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

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

 $a = new ArrayCollection($array);

How should I resolve this?

IleNea
  • 569
  • 4
  • 17

1 Answers1

1

You can merge collections like this (from How to merge two php Doctrine 2 ArrayCollection()):

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

So that can be applied to your case:

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

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

$licenses = new ArrayCollection($licensesArray);

This can result in having same license entity in the resulting collection several times. If that is not wanted, you can write some custom filtering to the array - or just create a repository getter for getting the licenses based on the user ids / user search params...

ejuhjav
  • 2,660
  • 2
  • 21
  • 32