Magento 2 Core Bug encontrado em todos os 2.1.x, 2.2

8

Passos para reproduzir

  1. Vá para Relatórios -> Por clientes

  2. Digite o nome do cliente na caixa de pesquisa

  3. Clique na pesquisa

Vai mostrar

Erro fatal: Coluna não encontrada: 1054 Coluna desconhecida 'customer_name' na cláusula 'where', a consulta foi: SELECT COUNT (DISTINCT detail.customer_id) FROM review AS main_table

Eu encontrei esse bug em todo o Magento 2.1.x. E publicou um problema no github

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

Alguém tem idéia sobre isso?

EDITAR:

Esse problema ainda continua no Magento 2.1.8, 2.2 e 2.2 EE

Prince Patel
fonte
Sim, alternativa que temos que usar em firstnamevez de customer_name. Porque customer_namenão coincide com nenhuma tabela #
21717 Camit1dk
Você tem algum patch disponível para esse problema?
Prince Patel
Verifique meu comentário no link abaixo, Resolvido github.com/magento/magento2/issues/10301
Camit1dk

Respostas:

6

Aqui está a solução ...

Criar novo módulo

Fornecedor / Módulo / etc / 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>

Fornecedor / módulo / etc / 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>

Fornecedor / Módulo / Bloco / Adminhtml / Review / 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;
    }
}

Fornecedor / módulo / modelo / modelo de recursos / revisão / cliente / coleção.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);
    }
}
Nicholas Miller
fonte
Boa resposta :) +1 para você. Além disso, se eu não encontrar nenhuma resposta dentro de 6 dias, darei +50 limites. Sim, eu sei que podemos substituir o arquivo principal e resolver esse problema. Mas não preciso de módulo externo para isso, preciso de patch para código pull no magento 2 github. Se você encontrou algum patch para isso. você também pode puxar código no repositório magento 2 github.
Prince Patel
você pode criar seu próprio patch com base neste módulo, mas não gosto dessa maneira. você altera o código principal.
Nicholas Miller
Sim, você está certo, não devemos mudar o núcleo, mas isso é para ajudar o Magento a implementar esse problema na próxima versão. Enfim, vou tentar criar um patch para ele.
Prince Patel
A idéia do @ PrincePatel é o caminho a seguir: forneça um patch para esse bug, a fim de permitir que ele seja mesclado ao núcleo -> você deve tentar acessar o GitHub e adicionar um.
Max