2017-06-30 3 views
0

Recherche d'une grille d'administration pour afficher l'historique des ventes de produits spécifiques, mais en obtenant l'erreur suivante lorsque vous tentez de filtrer par facturation nom:Magento: SQLSTATE [42S22]: Colonne non trouvée: 1054 Colonne inconnue 'billing_name' dans 'clause where'

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'billing_name' in 'where clause'

Voici ce que j'utilise:

protected function _prepareCollection() { 
    $productId = $this->getProduct()->getId(); 
    $ordersId = $this->getOrderIds($productId); 

    $collection = mage::getModel('sales/order') 
       ->getCollection() 
       ->addFieldToFilter('main_table.entity_id', array('in' => $ordersId)) 
       ->join('sales/order_address', '`sales/order_address`.entity_id=billing_address_id', array('billing_name' => "concat(firstname, ' ', lastname)")); 

    $this->setCollection($collection); 
    return parent::_prepareCollection(); 
} 

Et puis d'ajouter la colonne de la grille pour le nom de facturation:

protected function _prepareColumns() { 

    $this->addColumn('billing_name', array(
     'header' => Mage::helper('AdvancedStock')->__('Bill to Name'), 
     'index' => 'billing_name', 
     'sortable' => true 
    )); 

return parent::_prepareColumns(); 
} 

La colonne retourne tous les noms de facturation des commandes contenant le produit correctement, je ne peux tout simplement pas filtrer la colonne par son nom. Des idées?

+0

Vous avez ajouté le nom de facturation au modèle mais pas à la base de données? Existe-t-il lorsque vous affichez la table 'sales_flat_order' (ou est-ce la table' sales_flat_order_address')? – CD001

+0

@ CD001 Je crois que c'est dans 'sales_flat_order_address' bien que je n'ai pas accès à phpMyAdmin pour vérifier les tables – AJ47

Répondre

1

Les tables magento sales_flat_order et sales_flat_order_address n'auront pas la colonne nom_de facturation.
Vous pouvez utiliser la table sales_flat_order_grid au lieu de sales_flat_order_address pour obtenir la billing_name comme ça,

$collection = Mage::getModel('sales/order') 
        ->getCollection() 
        ->addFieldToFilter('main_table.entity_id', array('in' => $ordersId)) 
        ->join('sales/order_grid', '`sales/order_grid`.entity_id=main_table.entity_id', array('billing_name' => 'billing_name')); 

Sinon, vous pouvez Leftjoin la table sales_flat_order_grid avec la collection actuelle.

+0

Cela a fonctionné, merci! – AJ47

+0

Super :). Je vous remercie – Ranipriyanka