From 3382be0b1aa5b3237e12f09f28e687f3800d0775 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Lavorel?= Date: Thu, 5 Jul 2018 22:54:31 +0200 Subject: [PATCH 1/4] [update] enhance performance on large catalog --- app/code/Magento/Sales/Setup/UpgradeData.php | 47 ++++++++++---------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php index 4dcbb87df53ed..7b042fd79a954 100644 --- a/app/code/Magento/Sales/Setup/UpgradeData.php +++ b/app/code/Magento/Sales/Setup/UpgradeData.php @@ -173,31 +173,30 @@ private function convertSerializedDataToJson($setupVersion, SalesSetup $salesSet /** * Fill quote_address_id in table sales_order_address if it is empty. + * + * @param ModuleDataSetupInterface $setup */ - public function fillQuoteAddressIdInSalesOrderAddress() + public function fillQuoteAddressIdInSalesOrderAddress(ModuleDataSetupInterface $setup) { - $addressCollection = $this->addressCollectionFactory->create(); - $addressCollection->addFieldToFilter('quote_address_id', ['null' => true]); - - /** @var \Magento\Sales\Model\Order\Address $orderAddress */ - foreach ($addressCollection as $orderAddress) { - $orderId = $orderAddress->getParentId(); - $addressType = $orderAddress->getAddressType(); - - /** @var \Magento\Sales\Model\Order $order */ - $order = $this->orderFactory->create()->load($orderId); - $quoteId = $order->getQuoteId(); - $quote = $this->quoteFactory->create()->load($quoteId); - - if ($addressType == \Magento\Sales\Model\Order\Address::TYPE_SHIPPING) { - $quoteAddressId = $quote->getShippingAddress()->getId(); - $orderAddress->setData('quote_address_id', $quoteAddressId); - } elseif ($addressType == \Magento\Sales\Model\Order\Address::TYPE_BILLING) { - $quoteAddressId = $quote->getBillingAddress()->getId(); - $orderAddress->setData('quote_address_id', $quoteAddressId); - } - - $orderAddress->save(); - } + $updateOrderAddress = $setup->getConnection() + ->select() + ->joinInner( + ['sales_order' => $setup->getTable('sales_order')], + 'sales_order_address.parent_id = sales_order.entity_id', + ['quote_address_id' => 'quote_address.address_id'] + ) + ->joinInner( + ['quote_address' => $setup->getTable('quote_address')], + 'sales_order.quote_id = quote_address.quote_id AND sales_order_address.address_type = quote_address.address_type', + [] + ) + ->where( + 'sales_order_address.quote_address_id IS NULL' + ); + $updateOrderAddress = $setup->getConnection()->updateFromSelect( + $updateOrderAddress, + $setup->getTable('sales_order_address') + ); + $setup->getConnection()->query($updateOrderAddress); } } From 009a91cb9cf16e8cc627c91548ae9c4f06ffb7c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Lavorel?= Date: Fri, 6 Jul 2018 22:59:56 +0200 Subject: [PATCH 2/4] [fix] review --- app/code/Magento/Sales/Setup/UpgradeData.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php index 7b042fd79a954..0e2c7d472e0f8 100644 --- a/app/code/Magento/Sales/Setup/UpgradeData.php +++ b/app/code/Magento/Sales/Setup/UpgradeData.php @@ -187,7 +187,8 @@ public function fillQuoteAddressIdInSalesOrderAddress(ModuleDataSetupInterface $ ) ->joinInner( ['quote_address' => $setup->getTable('quote_address')], - 'sales_order.quote_id = quote_address.quote_id AND sales_order_address.address_type = quote_address.address_type', + 'sales_order.quote_id = quote_address.quote_id + AND sales_order_address.address_type = quote_address.address_type', [] ) ->where( From 18c8ca6c2dd170d3733f6b53e109dd9137615111 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Lavorel?= Date: Sat, 7 Jul 2018 21:13:17 +0200 Subject: [PATCH 3/4] [update] get table prefix --- app/code/Magento/Sales/Setup/UpgradeData.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php index 0e2c7d472e0f8..385c17ec50b62 100644 --- a/app/code/Magento/Sales/Setup/UpgradeData.php +++ b/app/code/Magento/Sales/Setup/UpgradeData.php @@ -178,25 +178,26 @@ private function convertSerializedDataToJson($setupVersion, SalesSetup $salesSet */ public function fillQuoteAddressIdInSalesOrderAddress(ModuleDataSetupInterface $setup) { + $salesOrderAddressTable = $setup->getTable('sales_order_address'); $updateOrderAddress = $setup->getConnection() ->select() ->joinInner( ['sales_order' => $setup->getTable('sales_order')], - 'sales_order_address.parent_id = sales_order.entity_id', + $salesOrderAddressTable . '.parent_id = sales_order.entity_id', ['quote_address_id' => 'quote_address.address_id'] ) ->joinInner( ['quote_address' => $setup->getTable('quote_address')], 'sales_order.quote_id = quote_address.quote_id - AND sales_order_address.address_type = quote_address.address_type', + AND ' . $salesOrderAddressTable . '.address_type = quote_address.address_type', [] ) ->where( - 'sales_order_address.quote_address_id IS NULL' + $salesOrderAddressTable . '.quote_address_id IS NULL' ); $updateOrderAddress = $setup->getConnection()->updateFromSelect( $updateOrderAddress, - $setup->getTable('sales_order_address') + $salesOrderAddressTable ); $setup->getConnection()->query($updateOrderAddress); } From de5b24b6adf1d27aad5a35a78ac826405b642031 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Lavorel?= Date: Sat, 7 Jul 2018 23:40:51 +0200 Subject: [PATCH 4/4] [fix] review --- app/code/Magento/Sales/Setup/UpgradeData.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php index 385c17ec50b62..77b96791e8cea 100644 --- a/app/code/Magento/Sales/Setup/UpgradeData.php +++ b/app/code/Magento/Sales/Setup/UpgradeData.php @@ -178,26 +178,26 @@ private function convertSerializedDataToJson($setupVersion, SalesSetup $salesSet */ public function fillQuoteAddressIdInSalesOrderAddress(ModuleDataSetupInterface $setup) { - $salesOrderAddressTable = $setup->getTable('sales_order_address'); + $addressTable = $setup->getTable('sales_order_address'); $updateOrderAddress = $setup->getConnection() ->select() ->joinInner( ['sales_order' => $setup->getTable('sales_order')], - $salesOrderAddressTable . '.parent_id = sales_order.entity_id', + $addressTable . '.parent_id = sales_order.entity_id', ['quote_address_id' => 'quote_address.address_id'] ) ->joinInner( ['quote_address' => $setup->getTable('quote_address')], 'sales_order.quote_id = quote_address.quote_id - AND ' . $salesOrderAddressTable . '.address_type = quote_address.address_type', + AND ' . $addressTable . '.address_type = quote_address.address_type', [] ) ->where( - $salesOrderAddressTable . '.quote_address_id IS NULL' + $addressTable . '.quote_address_id IS NULL' ); $updateOrderAddress = $setup->getConnection()->updateFromSelect( $updateOrderAddress, - $salesOrderAddressTable + $addressTable ); $setup->getConnection()->query($updateOrderAddress); }