В прошлом вы были настолько полезны, что я продолжаю возвращаться в поисках помощи и обучения.
На этот раз я пытаюсь получить все продукты, которые имеют количество больше 1 и которые есть в наличии (is_in_stock
= 1)
$products = Mage::getModel('catalog/product')->getCollection();
//$products->addAttributeToSelect('*');
//SELECT `e`.*, `stock`.`qty` FROM `catalog_product_entity` AS `e` LEFT JOIN `cataloginventory_stock_item` AS `stock` ON stock.product_id = e.entity_id
$products->getSelect()->joinLeft(
array('stock'=>'cataloginventory_stock_item'),
'stock.product_id = e.entity_id',
array('stock.qty', 'stock.is_in_stock')
);
Это возвращает qty
и is_in_stock
столбцы прикреплены к таблице продуктов.Вы можете проверить это следующим образом:
$products->getFirstItem()->getQty();
$products->getFirstItem()->getIsInStock();
Проблема начинается, когда я пытаюсь фильтровать по qty
и is_in_stock
.
$products->addFieldToFilter(array(
array('Qty','gt'=>'0'),
array('Is_in_stock','eq'=>'1'),
));
Это возвращает - Invalid attribute name
никогда не выполняетсяфильтрация.Я предполагаю, что он пытается найти e.qty
, но не может его найти.
Итак, я попытался отфильтровать по-другому:
$products->getSelect()->where("`qty` > 0");
$products->getSelect()->where("`is_in_stock` = 1");
Это не фильтрация, хотя, если вы посмотрите на его SQL-запрос (var_dump((string) $products->getSelect())
) и запустите этот запросв phpMyAdmin это работает.
Alan Storm в его уроке упоминает, что «Запрос к базе данных не будет выполнен, пока вы не попытаетесь получить доступ к элементу в Коллекции».Итак, я выполняю вызов $ products-> getFirstItem (), но он все еще не выполняет запрос или не выполняет фильтрацию другими словами.
Что я делаю не так?Любые идеи, как фильтровать по атрибутам, которые присоединяются к таблице?
Еще раз спасибо,
Margots