Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
GetSkuListInStock.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
15 
20 {
24  private $resourceConnection;
25 
29  private $skuListInStockFactory;
30 
34  private $groupConcatMaxLen;
35 
43  public function __construct(
44  ResourceConnection $resourceConnection,
45  SkuListInStockFactory $skuListInStockFactory,
46  int $groupConcatMaxLen
47  ) {
48  $this->resourceConnection = $resourceConnection;
49  $this->skuListInStockFactory = $skuListInStockFactory;
50  $this->groupConcatMaxLen = $groupConcatMaxLen;
51  }
52 
59  public function execute(array $sourceItemIds): array
60  {
61  $connection = $this->resourceConnection->getConnection();
62  $sourceStockLinkTable = $this->resourceConnection->getTableName(
63  StockSourceLinkResourceModel::TABLE_NAME_STOCK_SOURCE_LINK
64  );
65  $sourceItemTable = $this->resourceConnection->getTableName(
66  SourceItemResourceModel::TABLE_NAME_SOURCE_ITEM
67  );
68 
70  ->select()
71  ->from(
72  ['source_item' => $sourceItemTable],
73  [
75  sprintf("GROUP_CONCAT(DISTINCT %s SEPARATOR ',')", 'source_item.' . SourceItemInterface::SKU)
76  ]
77  )->joinInner(
78  ['stock_source_link' => $sourceStockLinkTable],
79  sprintf(
80  'source_item.%s = stock_source_link.%s',
83  ),
85  )->where('source_item.source_item_id IN (?)', $sourceItemIds)
86  ->group(['stock_source_link.' . StockSourceLink::STOCK_ID]);
87 
88  $connection->query('SET group_concat_max_len = ' . $this->groupConcatMaxLen);
89  $items = $connection->fetchAll($select);
90  return $this->getStockIdToSkuList($items);
91  }
92 
99  private function getStockIdToSkuList(array $items): array
100  {
101  $skuListInStockList = [];
102  foreach ($items as $item) {
104  $skuListInStock = $this->skuListInStockFactory->create();
105  $skuListInStock->setStockId((int)$item[StockSourceLink::STOCK_ID]);
106  $skuListInStock->setSkuList(explode(',', $item[SourceItemInterface::SKU]));
107  $skuListInStockList[] = $skuListInStock;
108  }
109  return $skuListInStockList;
110  }
111 }
__construct(ResourceConnection $resourceConnection, SkuListInStockFactory $skuListInStockFactory, int $groupConcatMaxLen)
$connection
Definition: bulk.php:13
$items