Skip to content

Commit dd4636e

Browse files
author
valdislav
committed
MAGETWO-35632: Refactor queries for Magento\Reports\Model\Resource\Quote\Collection
1 parent 4e0469a commit dd4636e

File tree

2 files changed

+33
-27
lines changed

2 files changed

+33
-27
lines changed

app/code/Magento/Reports/Model/Resource/Quote/Collection.php

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,17 @@ class Collection extends \Magento\Quote\Model\Resource\Quote\Collection
3939
/**
4040
* @var \Magento\Catalog\Model\Resource\Product\Collection
4141
*/
42-
protected $_productResource;
42+
protected $productResource;
4343

4444
/**
4545
* @var \Magento\Customer\Model\Resource\Customer
4646
*/
47-
protected $_customerResource;
47+
protected $customerResource;
48+
49+
/**
50+
* @var \Magento\Sales\Model\Resource\Order\Collection
51+
*/
52+
protected $orderResource;
4853

4954
/**
5055
* @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory
@@ -53,6 +58,7 @@ class Collection extends \Magento\Quote\Model\Resource\Quote\Collection
5358
* @param \Magento\Framework\Event\ManagerInterface $eventManager
5459
* @param \Magento\Catalog\Model\Resource\Product\Collection $productResource
5560
* @param \Magento\Customer\Model\Resource\Customer $customerResource
61+
* @param \Magento\Sales\Model\Resource\Order\Collection $orderResource
5662
* @param null $connection
5763
* @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
5864
*/
@@ -63,12 +69,14 @@ public function __construct(
6369
\Magento\Framework\Event\ManagerInterface $eventManager,
6470
\Magento\Catalog\Model\Resource\Product\Collection $productResource,
6571
\Magento\Customer\Model\Resource\Customer $customerResource,
72+
\Magento\Sales\Model\Resource\Order\Collection $orderResource,
6673
$connection = null,
6774
\Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
6875
) {
6976
parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
70-
$this->_productResource = $productResource;
71-
$this->_customerResource = $customerResource;
77+
$this->productResource = $productResource;
78+
$this->customerResource = $customerResource;
79+
$this->orderResource = $orderResource;
7280
}
7381

7482
/**
@@ -145,21 +153,22 @@ public function prepareActiveCartItems()
145153
}
146154

147155
/**
148-
* Orders quantity subselect
156+
* Orders quantity data
149157
*
150-
* @return \Magento\Framework\DB\Select
158+
* @param array $productIds
159+
* @return array
151160
*/
152-
protected function getOrdersSubSelect()
161+
protected function getOrdersData(array $productIds)
153162
{
154-
$ordersSubSelect = clone $this->getSelect();
163+
$ordersSubSelect = clone $this->orderResource->getSelect();
155164
$ordersSubSelect->reset()->from(
156165
['oi' => $this->getTable('sales_order_item')],
157166
['orders' => new \Zend_Db_Expr('COUNT(1)'), 'product_id']
158-
)->group(
167+
)->where('oi.product_id IN (?)', $productIds)->group(
159168
'oi.product_id'
160169
);
161170

162-
return $ordersSubSelect;
171+
return $this->orderResource->getConnection()->fetchAssoc($ordersSubSelect);
163172
}
164173

165174
/**
@@ -182,7 +191,7 @@ public function addStoreFilter($storeIds)
182191
*/
183192
public function addCustomerData($filter = null)
184193
{
185-
$customersSelect = $this->_customerResource->getReadConnection()->select();
194+
$customersSelect = $this->customerResource->getReadConnection()->select();
186195
$customersSelect->from(['customer' => 'customer_entity'], 'entity_id');
187196
if (isset($filter['customer_name'])) {
188197
$customersSelect = $this->getCustomerNames($customersSelect);
@@ -194,7 +203,7 @@ public function addCustomerData($filter = null)
194203
if (isset($filter['email'])) {
195204
$customersSelect->where('customer.email LIKE ?', '%' . $filter['email'] . '%');
196205
}
197-
$filteredCustomers = $this->_customerResource->getReadConnection()->fetchCol($customersSelect);
206+
$filteredCustomers = $this->customerResource->getReadConnection()->fetchCol($customersSelect);
198207
$this->getSelect()->where('main_table.customer_id IN (?)', $filteredCustomers);
199208
return $this;
200209
}
@@ -258,10 +267,10 @@ public function getSelectCountSql()
258267
*/
259268
protected function getCustomerNames($select)
260269
{
261-
$attrFirstname = $this->_customerResource->getAttribute('firstname');
270+
$attrFirstname = $this->customerResource->getAttribute('firstname');
262271
$attrFirstnameId = (int)$attrFirstname->getAttributeId();
263272
$attrFirstnameTableName = $attrFirstname->getBackend()->getTable();
264-
$attrLastname = $this->_customerResource->getAttribute('lastname');
273+
$attrLastname = $this->customerResource->getAttribute('lastname');
265274
$attrLastnameId = (int)$attrLastname->getAttributeId();
266275
$attrLastnameTableName = $attrLastname->getBackend()->getTable();
267276
$select->joinInner(
@@ -287,7 +296,7 @@ protected function getCustomerNames($select)
287296
*/
288297
public function resolveCustomerNames()
289298
{
290-
$select = $this->_customerResource->getReadConnection()->select();
299+
$select = $this->customerResource->getReadConnection()->select();
291300
$customerName = $select->getAdapter()->getConcatSql(['cust_fname.value', 'cust_lname.value'], ' ');
292301

293302
$select->from(
@@ -313,13 +322,13 @@ public function resolveCustomerNames()
313322
*/
314323
protected function getProductData()
315324
{
316-
$productConnection = $this->_productResource->getConnection('read');
317-
$productAttrName = $this->_productResource->getAttribute('name');
325+
$productConnection = $this->productResource->getConnection('read');
326+
$productAttrName = $this->productResource->getAttribute('name');
318327
$productAttrNameId = (int)$productAttrName->getAttributeId();
319-
$productAttrPrice = $this->_productResource->getAttribute('price');
328+
$productAttrPrice = $this->productResource->getAttribute('price');
320329
$productAttrPriceId = (int)$productAttrPrice->getAttributeId();
321330

322-
$select = clone $this->_productResource->getSelect();
331+
$select = clone $this->productResource->getSelect();
323332
$select->reset();
324333
$select->from(
325334
['main_table' => $this->getTable('catalog_product_entity')]
@@ -335,14 +344,7 @@ protected function getProductData()
335344
['product_price' => $productAttrPrice->getBackend()->getTable()],
336345
"product_price.entity_id = main_table.entity_id AND product_price.attribute_id = {$productAttrPriceId}",
337346
['price' => new \Zend_Db_Expr('product_price.value')]
338-
)->joinLeft(
339-
['order_items' => new \Zend_Db_Expr(sprintf('(%s)', $this->getOrdersSubSelect()))],
340-
'order_items.product_id = main_table.entity_id',
341-
[]
342-
)->columns(
343-
'order_items.orders'
344347
);
345-
346348
$productData = $productConnection->fetchAssoc($select);
347349
return $productData;
348350
}
@@ -356,12 +358,14 @@ protected function _afterLoad()
356358
{
357359
parent::_afterLoad();
358360
$productData = $this->getProductData();
361+
$productIds = array_keys($productData);
362+
$orderData = $this->getOrdersData($productIds);
359363
$items = $this->getItems();
360364
foreach ($items as $item) {
361365
$item->setId($item->getProductId());
362366
$item->setPrice($productData[$item->getProductId()]['price'] * $item->getBaseToGlobalRate());
363367
$item->setName($productData[$item->getProductId()]['name']);
364-
$item->setOrders($productData[$item->getProductId()]['orders']);
368+
$item->setOrders($orderData[$item->getProductId()]['orders']);
365369
}
366370

367371
return $this;

dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_methods.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2155,4 +2155,6 @@
21552155
['_isCacheEnabled', 'Magento\Eav\Model\Config'],
21562156
['_createCustomerAttribute', '\Magento\Customer\Model\Customer'],
21572157
['prepareCatalogProductPriceIndexTable', 'Magento\CatalogRule\Model\Observer'],
2158+
['prepareForProductsInCarts', 'Magento\Reports\Model\Resource\Quote\Collection'],
2159+
['getOrdersSubSelect', 'Magento\Reports\Model\Resource\Quote\Collection'],
21582160
];

0 commit comments

Comments
 (0)