Я добавил один фильтр в метод _getProductCollection()
класса Mage_Catalog_Block_Product_List
следующим образом.
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'");
...
}
Приведенный выше код работает нормально, начиная с версии Magento 1.7. Но всякий раз, когда я пишу следующий код, он дает
Столбец не найден: 1054 Неизвестный столбец «e.type_id» в «где предложение»
ошибка.
Код (который не работает).
protected function _getProductCollection()
{
...
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection
->addAttributeToSelect('type_id')
->addAttributeToFilter('type_id','simple');
...
}
Теперь вопросы .
- Будет ли какое-либо влияние на производительность, если я буду использовать первый рабочий код?
- Есть ли другой способ обойтись, чтобы иметь правильный фильтр продукта?
ОБНОВИТЬ:
Всякий раз, когда я применяю следующий код и использую rwd
тему, я не получаю никакой ошибки. Но всякий раз, когда я использую default
тему, я получаю сообщение об ошибке ниже,
Код
protected function _getProductCollection()
{
...
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection
->addAttributeToSelect('type_id')
->addAttributeToFilter('type_id','simple');
...
}
ошибка
SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'e.type_id' в 'предложении where', запрос: SELECT FLOOR ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 AS
range
, COUNT (*) КАКcount
ОТcatalog_product_index_price
ASe
INNER JOINcatalog_category_product_index
КАКcat_index
ПО cat_index.product_id = e.entity_id И cat_index.store_id = 1 И cat_index.visibility В (2, 4) и cat_index.category_id = '3' WHERE (e
.type_id
В ( 'простой' )) AND (e.website_id = '1') AND (e.customer_group_id = 0) AND (e.min_price IS NULL) ГРУППА ПО ЭТАЖУ ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 ЗАКАЗ ПО ЭТАЖУ ((КРУГЛЫЙ ((e.min_price) * 1, 2)) / 10) + 1 ASC
источник
Ответы:
Я так думаю:
Должен ли работает, вам не нужно добавлять
type_id
кselect
так этоcatalog_product_entity
столбец и он извлекается по умолчанию. Я всегда предлагаю записать окончательный запрос, чтобы получить лучшее представление о том, что происходит:Кстати: первый блок кода не имеет никакого смысла, поскольку вы присоединяете основную таблицу (
catalog_product_entity
) к себе.источник