diff --git a/app/code/Magento/Reports/Model/ResourceModel/Review/Customer/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Review/Customer/Collection.php index a832823967647..02eae4d75d2a7 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Review/Customer/Collection.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Review/Customer/Collection.php @@ -103,6 +103,21 @@ protected function _joinCustomers() return $this; } + /** + * {@inheritdoc} + * + * Additional processing of 'customer_name' field is required, as it is a concat field, which can not be aliased. + * @see _joinCustomers + */ + public function addFieldToFilter($field, $condition = null) + { + if ($field === 'customer_name') { + $field = $this->getConnection()->getConcatSql(['customer.firstname', 'customer.lastname'], ' '); + } + + return parent::addFieldToFilter($field, $condition); + } + /** * Get select count sql * @@ -110,13 +125,14 @@ protected function _joinCustomers() */ public function getSelectCountSql() { - $countSelect = clone $this->_select; + $countSelect = clone $this->getSelect(); $countSelect->reset(\Magento\Framework\DB\Select::ORDER); $countSelect->reset(\Magento\Framework\DB\Select::GROUP); $countSelect->reset(\Magento\Framework\DB\Select::HAVING); $countSelect->reset(\Magento\Framework\DB\Select::LIMIT_COUNT); $countSelect->reset(\Magento\Framework\DB\Select::LIMIT_OFFSET); $countSelect->reset(\Magento\Framework\DB\Select::COLUMNS); + $countSelect->reset(\Magento\Framework\DB\Select::WHERE); $countSelect->columns(new \Zend_Db_Expr('COUNT(DISTINCT detail.customer_id)')); diff --git a/dev/tests/integration/testsuite/Magento/Reports/Model/ResourceModel/Review/Customer/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Reports/Model/ResourceModel/Review/Customer/CollectionTest.php new file mode 100644 index 0000000000000..c14ccbff3a785 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Reports/Model/ResourceModel/Review/Customer/CollectionTest.php @@ -0,0 +1,36 @@ +collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + \Magento\Reports\Model\ResourceModel\Review\Customer\Collection::class + ); + } + + /** + * This tests covers issue described in: + * https://github.com/magento/magento2/issues/10301 + * + * @magentoDataFixture Magento/Review/_files/customer_review.php + */ + public function testSelectCountSql() + { + $this->collection->addFieldToFilter('customer_name', ['like' => '%John%'])->getItems(); + $this->assertEquals(1, $this->collection->getSize()); + } +}