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

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\Content\Product\Aggregate\ProductPrice\ProductPriceEntity;
  7. use Shopware\Core\Framework\DataAbstractionLayer\EntityCollection;
  8. use Shopware\Core\Framework\Log\Package;
  9. use Shopware\Core\System\Tax\TaxCollection;
  10. use Shopware\Core\System\Unit\UnitCollection;
  11. /**
  12.  * @extends EntityCollection<ProductEntity>
  13.  */
  14. #[Package('inventory')]
  15. class ProductCollection extends EntityCollection
  16. {
  17.     /**
  18.      * @return list<string>
  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.     /**
  33.      * @return list<string>
  34.      */
  35.     public function getTaxIds(): array
  36.     {
  37.         return $this->fmap(function (ProductEntity $product) {
  38.             return $product->getTaxId();
  39.         });
  40.     }
  41.     public function filterByTaxId(string $id): self
  42.     {
  43.         return $this->filter(function (ProductEntity $product) use ($id) {
  44.             return $product->getTaxId() === $id;
  45.         });
  46.     }
  47.     /**
  48.      * @return list<string>
  49.      */
  50.     public function getManufacturerIds(): array
  51.     {
  52.         return $this->fmap(function (ProductEntity $product) {
  53.             return $product->getManufacturerId();
  54.         });
  55.     }
  56.     public function filterByManufacturerId(string $id): self
  57.     {
  58.         return $this->filter(function (ProductEntity $product) use ($id) {
  59.             return $product->getManufacturerId() === $id;
  60.         });
  61.     }
  62.     /**
  63.      * @return list<string>
  64.      */
  65.     public function getUnitIds(): array
  66.     {
  67.         return $this->fmap(function (ProductEntity $product) {
  68.             return $product->getUnitId();
  69.         });
  70.     }
  71.     public function filterByUnitId(string $id): self
  72.     {
  73.         return $this->filter(function (ProductEntity $product) use ($id) {
  74.             return $product->getUnitId() === $id;
  75.         });
  76.     }
  77.     public function getTaxes(): TaxCollection
  78.     {
  79.         return new TaxCollection(
  80.             $this->fmap(function (ProductEntity $product) {
  81.                 return $product->getTax();
  82.             })
  83.         );
  84.     }
  85.     public function getManufacturers(): ProductManufacturerCollection
  86.     {
  87.         return new ProductManufacturerCollection(
  88.             $this->fmap(function (ProductEntity $product) {
  89.                 return $product->getManufacturer();
  90.             })
  91.         );
  92.     }
  93.     public function getUnits(): UnitCollection
  94.     {
  95.         return new UnitCollection(
  96.             $this->fmap(function (ProductEntity $product) {
  97.                 return $product->getUnit();
  98.             })
  99.         );
  100.     }
  101.     /**
  102.      * @return list<string>
  103.      */
  104.     public function getPriceIds(): array
  105.     {
  106.         $ids = [[]];
  107.         foreach ($this->getIterator() as $element) {
  108.             if ($element->getPrices() !== null) {
  109.                 $ids[] = $element->getPrices()->getIds();
  110.             }
  111.         }
  112.         return array_merge(...$ids);
  113.     }
  114.     public function getPrices(): ProductPriceCollection
  115.     {
  116.         $rules = [[]];
  117.         foreach ($this->getIterator() as $element) {
  118.             /** @var ProductPriceCollection $prices */
  119.             $prices $element->getPrices();
  120.             $rules[] = (array) $prices;
  121.         }
  122.         /** @var array<ProductPriceEntity> $productPriceEntities */
  123.         $productPriceEntities array_merge(...$rules);
  124.         return new ProductPriceCollection($productPriceEntities);
  125.     }
  126.     /**
  127.      * @param list<string> $optionIds
  128.      */
  129.     public function filterByOptionIds(array $optionIds): self
  130.     {
  131.         return $this->filter(function (ProductEntity $product) use ($optionIds) {
  132.             $ids $product->getOptionIds() ?? [];
  133.             $same array_intersect($ids$optionIds);
  134.             return \count($same) === \count($optionIds);
  135.         });
  136.     }
  137.     public function getCovers(): ProductMediaCollection
  138.     {
  139.         return new ProductMediaCollection($this->fmap(function (ProductEntity $product) {
  140.             return $product->getCover();
  141.         }));
  142.     }
  143.     public function getApiAlias(): string
  144.     {
  145.         return 'product_collection';
  146.     }
  147.     protected function getExpectedClass(): string
  148.     {
  149.         return ProductEntity::class;
  150.     }
  151. }