@@ -173,31 +173,32 @@ private function convertSerializedDataToJson($setupVersion, SalesSetup $salesSet
173
173
174
174
/**
175
175
* Fill quote_address_id in table sales_order_address if it is empty.
176
+ *
177
+ * @param ModuleDataSetupInterface $setup
176
178
*/
177
- public function fillQuoteAddressIdInSalesOrderAddress ()
179
+ public function fillQuoteAddressIdInSalesOrderAddress (ModuleDataSetupInterface $ setup )
178
180
{
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 );
202
203
}
203
204
}
0 commit comments