Magento 2 Core Bug trouvé dans tous les 2.1.x, 2.2

8

Étapes à reproduire

  1. Allez dans Rapports -> Par clients

  2. Entrez le nom du client dans la zone de recherche

  3. Cliquez sur recherche

Cela montrera

Erreur fatale: colonne non trouvée: 1054 Colonne inconnue 'nom_client' dans 'clause where', la requête était: SELECT COUNT (DISTINCT detail.customer_id) FROM review AS main_table

J'ai trouvé ce bogue dans tous les Magento 2.1.x. Et publié un problème sur github

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

Avez-vous une idée à ce sujet?

ÉDITER:

Ce problème persiste dans Magento 2.1.8, 2.2 et 2.2 EE

Prince Patel
la source
Oui, alternative que nous devons utiliser à la firstnameplace de customer_name. Ne customer_namecorrespond à aucune table
Camit1dk
Vous avez un correctif disponible pour ce problème?
Prince Patel
Consultez mon commentaire dans le lien ci-dessous, c'est résolu github.com/magento/magento2/issues/10301
Camit1dk

Réponses:

6

Voici la solution ...

Créer un nouveau module

Fournisseur / Module / 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>

Fournisseur / Module / 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>

Fournisseur / Module / Bloquer / 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;
    }
}

Fournisseur / Module / Modèle / ResourceModel / Review / Customer / 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);
    }
}
Nicholas Miller
la source
Bonne réponse :) +1 pour vous. De plus, si je n'ai trouvé aucune réponse dans les 6 jours, je donnerai une limite de +50. Oui, je sais que nous pouvons remplacer le fichier principal et résoudre ce problème. Mais je n'ai pas besoin de module externe pour cela, j'ai besoin d'un patch pour tirer du code sur magento 2 github. Si vous en avez trouvé un. vous pouvez également extraire du code sur le dépôt github de magento 2.
Prince Patel
vous pouvez créer votre propre patch basé sur ce module, mais je n'aime pas de cette façon. vous changez le code de base.
Nicholas Miller
Oui, vous avez raison, nous ne devons pas changer de noyau, mais cela aide Magento à implémenter ce problème dans la prochaine version. Quoi qu'il en soit, je vais essayer de créer un patch pour cela.
Prince Patel
L'idée de @ PrincePatel est la voie à suivre: fournir un correctif pour ce bogue afin de le laisser fusionner dans le noyau -> vous devriez essayer de monter sur GitHub et en ajouter un.
Max