GetSourceItemIds.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\InventoryIndexer\Indexer\SourceItem;
  8. use Magento\Framework\App\ResourceConnection;
  9. use Magento\Inventory\Model\ResourceModel\SourceItem as SourceItemResourceModel;
  10. use Magento\InventoryApi\Api\Data\SourceItemInterface;
  11. /**
  12. * Get SourceItem ids from array of SourceItems
  13. */
  14. class GetSourceItemIds
  15. {
  16. /**
  17. * @var ResourceConnection
  18. */
  19. private $resourceConnection;
  20. /**
  21. * @param ResourceConnection $resourceConnection
  22. */
  23. public function __construct(ResourceConnection $resourceConnection)
  24. {
  25. $this->resourceConnection = $resourceConnection;
  26. }
  27. /**
  28. * @param SourceItemInterface[] $sourceItems
  29. * @return array
  30. */
  31. public function execute(array $sourceItems): array
  32. {
  33. $connection = $this->resourceConnection->getConnection();
  34. $select = $connection->select()
  35. ->from(
  36. $this->resourceConnection->getTableName(SourceItemResourceModel::TABLE_NAME_SOURCE_ITEM),
  37. [SourceItemResourceModel::ID_FIELD_NAME]
  38. );
  39. foreach ($sourceItems as $sourceItem) {
  40. $sku = $connection->quote($sourceItem->getSku());
  41. $sourceCode = $connection->quote($sourceItem->getSourceCode());
  42. $select->orWhere(
  43. SourceItemInterface::SKU . " = {$sku} AND " .
  44. SourceItemInterface::SOURCE_CODE ." = {$sourceCode}"
  45. );
  46. }
  47. return $connection->fetchCol($select, SourceItemResourceModel::ID_FIELD_NAME);
  48. }
  49. }