vendor/shopware/core/Content/Product/ProductCollection.php line 21

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Content\Product;
  3. use Shopware\Core\Content\Product\Aggregate\ProductManufacturer\ProductManufacturerCollection;
  4. use Shopware\Core\Content\Product\Aggregate\ProductMedia\ProductMediaCollection;
  5. use Shopware\Core\Content\Product\Aggregate\ProductPrice\ProductPriceCollection;
  6. use Shopware\Core\Framework\DataAbstractionLayer\EntityCollection;
  7. use Shopware\Core\System\Tax\TaxCollection;
  8. use Shopware\Core\System\Unit\UnitCollection;
  9. /**
  10.  * @method void               add(ProductEntity $entity)
  11.  * @method void               set(string $key, ProductEntity $entity)
  12.  * @method ProductEntity[]    getIterator()
  13.  * @method ProductEntity[]    getElements()
  14.  * @method ProductEntity|null get(string $key)
  15.  * @method ProductEntity|null first()
  16.  * @method ProductEntity|null last()
  17.  */
  18. class ProductCollection extends EntityCollection
  19. {
  20.     public function getParentIds(): array
  21.     {
  22.         return $this->fmap(function (ProductEntity $product) {
  23.             return $product->getParentId();
  24.         });
  25.     }
  26.     public function filterByParentId(string $id): self
  27.     {
  28.         return $this->filter(function (ProductEntity $product) use ($id) {
  29.             return $product->getParentId() === $id;
  30.         });
  31.     }
  32.     public function getTaxIds(): array
  33.     {
  34.         return $this->fmap(function (ProductEntity $product) {
  35.             return $product->getTaxId();
  36.         });
  37.     }
  38.     public function filterByTaxId(string $id): self
  39.     {
  40.         return $this->filter(function (ProductEntity $product) use ($id) {
  41.             return $product->getTaxId() === $id;
  42.         });
  43.     }
  44.     public function getManufacturerIds(): array
  45.     {
  46.         return $this->fmap(function (ProductEntity $product) {
  47.             return $product->getManufacturerId();
  48.         });
  49.     }
  50.     public function filterByManufacturerId(string $id): self
  51.     {
  52.         return $this->filter(function (ProductEntity $product) use ($id) {
  53.             return $product->getManufacturerId() === $id;
  54.         });
  55.     }
  56.     public function getUnitIds(): array
  57.     {
  58.         return $this->fmap(function (ProductEntity $product) {
  59.             return $product->getUnitId();
  60.         });
  61.     }
  62.     public function filterByUnitId(string $id): self
  63.     {
  64.         return $this->filter(function (ProductEntity $product) use ($id) {
  65.             return $product->getUnitId() === $id;
  66.         });
  67.     }
  68.     public function getTaxes(): TaxCollection
  69.     {
  70.         return new TaxCollection(
  71.             $this->fmap(function (ProductEntity $product) {
  72.                 return $product->getTax();
  73.             })
  74.         );
  75.     }
  76.     public function getManufacturers(): ProductManufacturerCollection
  77.     {
  78.         return new ProductManufacturerCollection(
  79.             $this->fmap(function (ProductEntity $product) {
  80.                 return $product->getManufacturer();
  81.             })
  82.         );
  83.     }
  84.     public function getUnits(): UnitCollection
  85.     {
  86.         return new UnitCollection(
  87.             $this->fmap(function (ProductEntity $product) {
  88.                 return $product->getUnit();
  89.             })
  90.         );
  91.     }
  92.     public function getPriceIds(): array
  93.     {
  94.         $ids = [[]];
  95.         foreach ($this->getIterator() as $element) {
  96.             $ids[] = $element->getPrices()->getIds();
  97.         }
  98.         return array_merge(...$ids);
  99.     }
  100.     public function getPrices(): ProductPriceCollection
  101.     {
  102.         $rules = [[]];
  103.         foreach ($this->getIterator() as $element) {
  104.             $rules[] = $element->getPrices();
  105.         }
  106.         $rules array_merge(...$rules);
  107.         return new ProductPriceCollection($rules);
  108.     }
  109.     public function filterByOptionIds(array $optionIds): self
  110.     {
  111.         return $this->filter(function (ProductEntity $product) use ($optionIds) {
  112.             $ids $product->getOptionIds();
  113.             $same array_intersect($ids$optionIds);
  114.             return \count($same) === \count($optionIds);
  115.         });
  116.     }
  117.     public function getCovers(): ProductMediaCollection
  118.     {
  119.         return new ProductMediaCollection($this->fmap(function (ProductEntity $product) {
  120.             return $product->getCover();
  121.         }));
  122.     }
  123.     public function getApiAlias(): string
  124.     {
  125.         return 'product_collection';
  126.     }
  127.     protected function getExpectedClass(): string
  128.     {
  129.         return ProductEntity::class;
  130.     }
  131. }