Ich habe einen Filter in Methode _getProductCollection()
der Klasse Mage_Catalog_Block_Product_List
wie folgt hinzugefügt .
protected function _getProductCollection()
{
...
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection->getSelect()->joinInner(
array('cpe' => 'catalog_product_entity'),
'e.entity_id = cpe.entity_id'
)
->where("cpe.type_id = 'simple'");
...
}
Der obige Code funktioniert ab Magento Version 1.7 einwandfrei. Aber wann immer ich den folgenden Code schreibe, gibt es
Spalte nicht gefunden: 1054 Unbekannte Spalte 'e.type_id' in 'where-Klausel'
Error.
Der Code (der nicht funktioniert).
protected function _getProductCollection()
{
...
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection
->addAttributeToSelect('type_id')
->addAttributeToFilter('type_id','simple');
...
}
Nun die Fragen .
- Wird es Leistungseinbußen geben, wenn ich den ersten Arbeitscode verwende?
- Gibt es eine andere Möglichkeit, um einen geeigneten Produktfilter zu erhalten?
AKTUALISIEREN:
Immer wenn ich den folgenden Code anwende und das rwd
Thema verwende, wird keine Fehlermeldung angezeigt. Aber wenn ich ein default
Theme benutze, erhalte ich den folgenden Fehler:
Code
protected function _getProductCollection()
{
...
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection
->addAttributeToSelect('type_id')
->addAttributeToFilter('type_id','simple');
...
}
Error
SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'e.type_id' in 'where-Klausel', Abfrage war: SELECT FLOOR ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 AS
range
, COUNT (*) AScount
VONcatalog_product_index_price
ASe
INNER JOINcatalog_category_product_index
AScat_index
ON cat_index.product_id = e.entity_id UND cat_index.store_id = 1 und cat_index.visibility IN (2, 4) und cat_index.category_id = '3' , wobei (e
.type_id
IN ( 'einfachen' )) AND (e.website_id = '1') AND (e.customer_group_id = 0) AND (e.min_price IST NICHT NULL) GROUP BY FLOOR ((RUND ((e.min_price) * 1, 2)) / 10) + 1 ORDER BY FLOOR ((RUND ((e.min_price) * 1, 2)) / 10) + 1 ASC
quelle
Antworten:
Ich denke, dass:
Sollte dies funktionieren, müssen Sie nichts hinzufügen
type_id
,select
da es sich um einecatalog_product_entity
Spalte handelt, die standardmäßig abgerufen wird. Ich empfehle immer, die endgültige Abfrage zu protokollieren, um eine optimale Vorstellung davon zu erhalten, was passiert:Übrigens: Der erste Codeblock hat überhaupt keinen Sinn, da Sie die Haupttabelle (
catalog_product_entity
) mit sich selbst verbinden.quelle