DeleteMultiple.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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\Inventory\Model\ResourceModel\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. * Implementation of SourceItem delete multiple operation for specific db layer
  13. * Delete Multiple used here for performance efficient purposes over single delete operation
  14. */
  15. class DeleteMultiple
  16. {
  17. /**
  18. * @var ResourceConnection
  19. */
  20. private $resourceConnection;
  21. /**
  22. * @param ResourceConnection $resourceConnection
  23. */
  24. public function __construct(
  25. ResourceConnection $resourceConnection
  26. ) {
  27. $this->resourceConnection = $resourceConnection;
  28. }
  29. /**
  30. * Multiple delete source items
  31. *
  32. * @param SourceItemInterface[] $sourceItems
  33. * @return void
  34. */
  35. public function execute(array $sourceItems)
  36. {
  37. if (!count($sourceItems)) {
  38. return;
  39. }
  40. $connection = $this->resourceConnection->getConnection();
  41. $tableName = $this->resourceConnection->getTableName(SourceItemResourceModel::TABLE_NAME_SOURCE_ITEM);
  42. $whereSql = $this->buildWhereSqlPart($sourceItems);
  43. $connection->delete($tableName, $whereSql);
  44. }
  45. /**
  46. * @param array $sourceItems
  47. * @return string
  48. */
  49. private function buildWhereSqlPart(array $sourceItems): string
  50. {
  51. $connection = $this->resourceConnection->getConnection();
  52. $condition = [];
  53. foreach ($sourceItems as $sourceItem) {
  54. $skuCondition = $connection->quoteInto(
  55. SourceItemInterface::SKU . ' = ?',
  56. $sourceItem->getSku()
  57. );
  58. $sourceCodeCondition = $connection->quoteInto(
  59. SourceItemInterface::SOURCE_CODE . ' = ?',
  60. $sourceItem->getSourceCode()
  61. );
  62. $condition[] = '(' . $skuCondition . ' AND ' . $sourceCodeCondition . ')';
  63. }
  64. return implode(' OR ', $condition);
  65. }
  66. }