Я пытаюсь получить все продукты, хранящиеся под определенной категорией.
Все работает отлично писать:Magento: Неверная ошибка имени атрибута
$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();
Но страница не может быть загружена, я получаю сообщение об ошибке «Там было ошибка при обработке запроса»и журнал ошибок хранится в вар/отчета, начиная с
а: 5: {я: 0; s: 33:" Неверное имя атрибута: позиция
и. Я не могу понять, чтобы решить это. Я много гулял и много пробовал решений, но никто не работал.
Я не могу понять, почему он принимает атрибут для сортировки, а не для фильтрации.
Любая идея?
EDITED:
Запрос осуществляется $ продуктов
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...')
Редакция:
Я думаю, что моя проблема похожа на this one , но я не могу понять, как ее решить!
EDITED:
Пытались также
$category = Mage::getModel('catalog/category')->load($categoryId);
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('cat_index_position')
->addAttributeToFilter('cat_index_position', array('gt'=>'0'));
всегда один и тот же ошибку
EDITED:
Если добавить
WHERE `position` > 0
В браузере запроса он работает!
Так как я могу добавить его в свой запрос в magento?
Это не работает, как хорошо. :(Я уже знал, что ссылка, однако, спасибо за обмен :) –
Можете ли вы показать нам запрос, выполненный вашей коллекцией? – haltabush
, пожалуйста, смотрите раздел «отредактированный» внутри моего вопроса, спасибо. –