Базовая ошибка Magento 2 обнаружена во всех версиях 2.1.x, 2.2

8

Действия по воспроизведению

  1. Перейти к отчетам -> по клиентам

  2. Введите имя клиента в поле поиска

  3. Нажмите на поиск

Это покажет

Неустранимая ошибка: столбец не найден: 1054 Неизвестный столбец 'customer_name' в 'where clause', запрос был: SELECT COUNT (DISTINCT detail.customer_id) ОТ обзора ОТ AS main_table

Я нашел эту ошибку во всех Magento 2.1.x. И выложил вопрос на github

https://github.com/magento/magento2/issues/10301

У кого-нибудь есть идеи по этому поводу?

РЕДАКТИРОВАТЬ:

Эта проблема все еще продолжается в Magento 2.1.8, 2.2 и 2.2 EE

Принц Патель
источник
Да, альтернативу мы должны использовать firstnameвместо customer_name. Becuase customer_nameне совпадает ни с одним столом
Camit1dk
У вас есть патч для этой проблемы?
Принц Патель
Посмотрите мой комментарий в приведенной ниже ссылке: решено github.com/magento/magento2/issues/10301
Camit1dk

Ответы:

6

Вот решение ...

Создать новый модуль

Производитель / модуль / и т.д. / module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Vendor_Module" setup_version="2.1.0">
        <sequence>
            <module name="Magento_Review"/>
        </sequence>
    </module>
</config>

Производитель / модуль / и т.д. / adminhtml / di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Reports\Block\Adminhtml\Review\Customer" type="Vendor\Module\Block\Adminhtml\Review\Customer" />
    <preference for="Magento\Reports\Model\ResourceModel\Review\Customer\Collection" type="Vendor\Module\Model\ResourceModel\Review\Customer\Collection" />
</config>

Производитель / модуль / блок / Adminhtml / Обзор / Customer.php

<?php

namespace Vendor\Module\Block\Adminhtml\Review;

class Customer extends \Magento\Reports\Block\Adminhtml\Review\Customer
{
    protected function _prepareLayout()
    {
        parent::_prepareLayout();

        $customerNameColumn = $this->getChildBlock('grid')
            ->getChildBlock('grid.columnSet')
            ->getChildBlock('customer_name');
        $customerNameColumn->setFilterIndex([
            'customer.firstname',
            'customer.lastname'
        ]);

        return $this;
    }
}

Производитель / модуль / модель / ResourceModel / Обзор / Клиент / Collection.php

<?php
namespace Vendor\Module\Model\ResourceModel\Review\Customer;

class Collection extends \Magento\Reports\Model\ResourceModel\Review\Customer\Collection
{
    public function addFieldToFilter($field, $condition = null)
    {
        if (is_array($field) && array_key_exists('like', $condition)) {
            $condition = array_fill(0, count($field), $condition);
        }

        return parent::addFieldToFilter($field, $condition);
    }
}
Николас Миллер
источник
Хороший ответ :) +1 для вас. Также, если я не нашел ответа в течение 6 дней, я дам +50 границу. Да, я знаю, что мы можем переопределить основной файл и решить эту проблему. Но мне не нужен внешний модуль для этого, мне нужен патч для pull-кода на magento 2 github. Если вы нашли какой-либо патч для него. Вы также можете вытащить код из репозитория magento 2 github.
Принц Патель
Вы можете создать свой собственный патч на основе этого модуля, но мне это не нравится. Вы меняете основной код.
Николас Миллер
Да, вы правы, мы не должны менять ядро, но это поможет Magento реализовать эту проблему в следующей версии. Во всяком случае, я постараюсь создать патч для него.
Принц Патель
Идея @ PrincePatel заключается в следующем: предоставьте патч для этой ошибки, чтобы позволить ей слиться с ядром -> вы должны попытаться войти в GitHub и добавить его.
Макс