Базовая ошибка 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 и добавить его.
— Макс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.