Skip to content

Commit e4afa3a

Browse files
author
Stanislav Idolov
authored
ENGCOM-2596: [update] enhance performance on large catalog #16570
2 parents de9adbc + f78bca4 commit e4afa3a

File tree

1 file changed

+25
-24
lines changed

1 file changed

+25
-24
lines changed

app/code/Magento/Sales/Setup/UpgradeData.php

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -173,31 +173,32 @@ private function convertSerializedDataToJson($setupVersion, SalesSetup $salesSet
173173

174174
/**
175175
* Fill quote_address_id in table sales_order_address if it is empty.
176+
*
177+
* @param ModuleDataSetupInterface $setup
176178
*/
177-
public function fillQuoteAddressIdInSalesOrderAddress()
179+
public function fillQuoteAddressIdInSalesOrderAddress(ModuleDataSetupInterface $setup)
178180
{
179-
$addressCollection = $this->addressCollectionFactory->create();
180-
$addressCollection->addFieldToFilter('quote_address_id', ['null' => true]);
181-
182-
/** @var \Magento\Sales\Model\Order\Address $orderAddress */
183-
foreach ($addressCollection as $orderAddress) {
184-
$orderId = $orderAddress->getParentId();
185-
$addressType = $orderAddress->getAddressType();
186-
187-
/** @var \Magento\Sales\Model\Order $order */
188-
$order = $this->orderFactory->create()->load($orderId);
189-
$quoteId = $order->getQuoteId();
190-
$quote = $this->quoteFactory->create()->load($quoteId);
191-
192-
if ($addressType == \Magento\Sales\Model\Order\Address::TYPE_SHIPPING) {
193-
$quoteAddressId = $quote->getShippingAddress()->getId();
194-
$orderAddress->setData('quote_address_id', $quoteAddressId);
195-
} elseif ($addressType == \Magento\Sales\Model\Order\Address::TYPE_BILLING) {
196-
$quoteAddressId = $quote->getBillingAddress()->getId();
197-
$orderAddress->setData('quote_address_id', $quoteAddressId);
198-
}
199-
200-
$orderAddress->save();
201-
}
181+
$addressTable = $setup->getTable('sales_order_address');
182+
$updateOrderAddress = $setup->getConnection()
183+
->select()
184+
->joinInner(
185+
['sales_order' => $setup->getTable('sales_order')],
186+
$addressTable . '.parent_id = sales_order.entity_id',
187+
['quote_address_id' => 'quote_address.address_id']
188+
)
189+
->joinInner(
190+
['quote_address' => $setup->getTable('quote_address')],
191+
'sales_order.quote_id = quote_address.quote_id
192+
AND ' . $addressTable . '.address_type = quote_address.address_type',
193+
[]
194+
)
195+
->where(
196+
$addressTable . '.quote_address_id IS NULL'
197+
);
198+
$updateOrderAddress = $setup->getConnection()->updateFromSelect(
199+
$updateOrderAddress,
200+
$addressTable
201+
);
202+
$setup->getConnection()->query($updateOrderAddress);
202203
}
203204
}

0 commit comments

Comments
 (0)