Magento SQLSTATE[23000]: Integrity constraint violation: 1052 Column ‚increment_id‘ in where clause is ambiguous

Gepostet am Mai 22, 2013

Das Problem ist, das Sie zur Abfrage eines Grids, ein Join hinzugefügt und zusätzlich ein Filter auf ein Feld gesetzt haben (meist über das Grid direkt). Die Fehlermeldung enthält dann das gefilterte Feld, im Beispiel die „increment_id“. Das ganze ist grundsätzlich kein Problem, aber ganz grob gesagt, fehlt im Where einfach die Angabe der Tabelle:

1
$this->getCollection()->getSelect()->where('increment_id = ?', $id);

sollte aber wie folgt heißen:

1
$this->getCollection()->getSelect()->where('table_alias.increment_id = ?', $id);

Lösungsansatz:

Der Fehler kommt meist aus einem Grid, welchem per Join Felder hinzugefügt wurden. Also müssen wir auch dieses Grid bearbeiten oder die Collection auf die das Grid zugreift:

Möglichkeit 1

Als Beispiel nehmen wir die Bestellübersicht:
Grundsätzlich handelt es sich um folgende Datei, beim „Bestellungs-Grid“: Mage_Sales_Model_Mysql4_Order_Grid_Collection
/app/code/core/Mage/Sale/Model/Mysql4/Order/Grid/Collection.php

Nun könnte man das Problem durch folgende Befehle in der „_initSelect()“ Funktion Lösen, dies sollte natürlich an der Stelle geschehen, wo die Collection auch überschrieben wird.

1
2
3
4
5
6
7
8
protected function _initSelect()
    {
        parent::_initSelect();
 
        $this->addFilterToMap('increment_id', 'main_table.increment_id'); //behebt das Problem für die increment_id
        $this->addFilterToMap('billing_name', 'main_table.billing_name');
        $this->addFilterToMap('grand_total', 'main_table.grand_total');
        ....

Möglichkeit 2

Eine Anpassung direkt in der Grid.php:

1
2
3
4
5
6
7
8
protected function _prepareCollection()
    {
        ...
        $collection->addFilterToMap('increment_id', 'main_table.increment_id');
        ...
        $this->setCollection($collection);
        return parent::_prepareCollection();
    }

Tags: ,

Leave a Reply

 

Posts of Current Category



Facebook: