vendor/shopware/core/Framework/DataAbstractionLayer/EntityCollection.php line 35

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Framework\DataAbstractionLayer;
  3. use Shopware\Core\Framework\Struct\Collection;
  4. /**
  5.  * @template TElement of Entity
  6.  *
  7.  * @extends Collection<TElement>
  8.  */
  9. class EntityCollection extends Collection
  10. {
  11.     public function __construct(iterable $elements = [])
  12.     {
  13.         parent::__construct([]);
  14.         foreach ($elements as $element) {
  15.             $this->validateType($element);
  16.             $this->set($element->getUniqueIdentifier(), $element);
  17.         }
  18.     }
  19.     public function fill(array $entities): void
  20.     {
  21.         array_map([$this'add'], $entities);
  22.     }
  23.     /**
  24.      * @param TElement $entity
  25.      */
  26.     public function add($entity): void
  27.     {
  28.         $this->set($entity->getUniqueIdentifier(), $entity);
  29.     }
  30.     /**
  31.      * @return list<string>
  32.      */
  33.     public function getIds(): array
  34.     {
  35.         return $this->fmap(static function (Entity $entity) {
  36.             return $entity->getUniqueIdentifier();
  37.         });
  38.     }
  39.     public function filterByProperty(string $property$value)
  40.     {
  41.         return $this->filter(
  42.             static function (Entity $struct) use ($property$value) {
  43.                 return $struct->get($property) === $value;
  44.             }
  45.         );
  46.     }
  47.     public function filterAndReduceByProperty(string $property$value)
  48.     {
  49.         $filtered = [];
  50.         foreach ($this->getIterator() as $key => $struct) {
  51.             if ($struct->get($property) !== $value) {
  52.                 continue;
  53.             }
  54.             $filtered[] = $struct;
  55.             $this->remove($key);
  56.         }
  57.         return $this->createNew($filtered);
  58.     }
  59.     /**
  60.      * @param EntityCollection<TElement> $collection
  61.      */
  62.     public function merge(self $collection): void
  63.     {
  64.         /** @var TElement $entity */
  65.         foreach ($collection as $entity) {
  66.             if ($this->has($entity->getUniqueIdentifier())) {
  67.                 continue;
  68.             }
  69.             $this->add($entity);
  70.         }
  71.     }
  72.     /**
  73.      * @param TElement $entity
  74.      */
  75.     public function insert(int $positionEntity $entity): void
  76.     {
  77.         $items array_values($this->elements);
  78.         $this->elements = [];
  79.         foreach ($items as $index => $item) {
  80.             if ($index === $position) {
  81.                 $this->add($entity);
  82.             }
  83.             $this->add($item);
  84.         }
  85.     }
  86.     public function getList(array $ids)
  87.     {
  88.         return $this->createNew(array_intersect_key($this->elementsarray_flip($ids)));
  89.     }
  90.     public function sortByIdArray(array $ids): void
  91.     {
  92.         $sorted = [];
  93.         foreach ($ids as $id) {
  94.             if (\is_array($id)) {
  95.                 $id implode('-'array_unique($id));
  96.             }
  97.             if (\array_key_exists($id$this->elements)) {
  98.                 $sorted[$id] = $this->elements[$id];
  99.             }
  100.         }
  101.         $this->elements $sorted;
  102.     }
  103.     protected function getExpectedClass(): string
  104.     {
  105.         return Entity::class;
  106.     }
  107. }