你一直在我继续回来寻求帮助和学习过去那么有用。
这一次,我想获得具有大于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该查询,它的工作原理。
艾伦风暴在他的教程中提到,“数据库查询将无法进行,直到你尝试在集合访问项目”。 于是,我让$产品 - > getFirstItem()调用,但它仍然不执行换句话说查询或过滤。
我究竟做错了什么? 任何想法如何由被连接表中的属性过滤器?
再次感谢你,
玛戈