Я пытаюсь получить все продукты, хранящиеся в определенной категории.
Все работает нормально, написание:
$category = Mage::getModel('catalog/category')->load($categoryId);
$products = Mage::getModel('catalog/product')
->getCollection()
->addCategoryFilter($category)
->setOrder('position', 'DESC')
->load();
У меня все продукты правильно отсортированы по ихАтрибут позиции.
Так как некоторые из них не имеют установленной позиции, я хочу исключить их, поэтому я попытался просто:
$category = Mage::getModel('catalog/category')->load($categoryId);
$products = Mage::getModel('catalog/product')
->getCollection()
->addCategoryFilter($category)
->addFieldToFilter( 'position', array('gt'=>0) )
->setOrder('position', 'DESC')
->load();
Но страница не может быть загружена, я получаюошибка «Произошла ошибка при обработке вашего запроса» и журнал ошибок сохраняется в var / report, начиная с
a: 5: {i: 0; s: 33: «Неверное имя атрибута:позиция.
И я не могу решить, чтобы решить эту проблему .. Я много гуглил и пробовал много решений, но никто не работал.
Я не могу понять, почему он принимает атрибут для сортировкипока не для фильтрации.
Есть идеи?
РЕДАКТИРОВАНИЕ:
Запрос, выполняемый $ products
SELECT
`e`.*,
`cat_index`.`position` AS `cat_index_position`,
`price_index`.`price`,
`price_index`.`tax_class_id`,
`price_index`.`final_price`,
IF(`price_index`.`tier_price`, LEAST(`price_index`.`min_price`, `price_index`.`tier_price`),
`price_index`.`min_price`) AS `minimal_price`,
`price_index`.`min_price`,
`price_index`.`max_price`,
`price_index`.`tier_price`
FROM
`tb_catalog_product_entity` AS `e`
INNER JOIN
`tb_catalog_category_product_index` AS `cat_index`
ON
cat_index.product_id=e.entity_id
AND
cat_index.store_id='3'
AND
cat_index.category_id='2476'
AND
cat_index.is_parent=1
INNER JOIN
`tb_catalog_product_index_price` AS `price_index`
ON
price_index.entity_id = e.entity_id
AND
price_index.website_id = '1'
AND
price_index.customer_group_id = 0
ORDER BY
`cat_index_position` ASC,
`cat_index`.`product_id` ASC
Я также пытался:
$category = Mage::getModel('catalog/category')->load($categoryId);
$products = Mage::getModel('catalog/product')
->getCollection()
->addCategoryFilter($category)
->addFieldToFilter( 'cat_index_position', 'notnull' )
->setOrder('position', 'ASC')
->load();
с тем же результатом:
Invalid attribute name: cat_index_position.";i:1;s:4700:"#0 /path/app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php(1155): Mage::exception('Mage_Eav', 'Invalid attribu...')
РЕДАКТИРОВАНИЕ:
Я думаю, что моя проблемапохож на этот , но я не могу понять, как его решить!
РЕДАКТИРОВАНИЕ:
Пробовал также
$category = Mage::getModel('catalog/category')->load($categoryId);
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('cat_index_position')
->addAttributeToFilter('cat_index_position', array('gt'=>'0'));
Всегда одна и та же ошибка
РЕДАКТИРОВАНИЕ:
Если я добавлю
WHERE `position` > 0
В моем браузере запросов это работает!
Так как мне добавить его в свой запрос в magento?