Collections 加入后,不能按属性数量过滤-从库存中获取产品
你过去帮了我很大的忙,我不断地回来寻求帮助和学习 这一次,我试图获得所有数量大于1且有库存的产品(Collections 加入后,不能按属性数量过滤-从库存中获取产品,collections,magento,Collections,Magento,你过去帮了我很大的忙,我不断地回来寻求帮助和学习 这一次,我试图获得所有数量大于1且有库存的产品(is_in_stock=1) 这将返回附加到产品表的数量和库存中的列。您可以按如下方式进行测试: $products->getFirstItem()->getQty(); $products->getFirstItem()->getIsInStock(); 当我尝试按数量进行筛选,并且有库存时,问题就开始了 $products->
is_in_stock
=1)
这将返回附加到产品表的数量
和库存中的列。您可以按如下方式进行测试:
$products->getFirstItem()->getQty();
$products->getFirstItem()->getIsInStock();
当我尝试按数量
进行筛选,并且有库存时,问题就开始了
$products->addFieldToFilter(array(
array('Qty','gt'=>'0'),
array('Is_in_stock','eq'=>'1'),
));
这将返回-无效的属性名称
从不执行筛选。我猜它正在尝试搜索e.qty
,但找不到它
因此,我尝试以不同的方式进行过滤:
$products->getSelect()->where("`qty` > 0");
$products->getSelect()->where("`is_in_stock` = 1");
这也不是过滤,即使您查看它的sql查询(var\u dump((string)$products->getSelect())
),并在phpMyAdmin中运行该查询,它仍然可以工作
Alan Storm在中提到“在尝试访问集合中的项目之前,不会进行数据库查询”。因此,我进行了$products->getFirstItem()调用,但它仍然没有执行查询或过滤(换句话说)
我做错了什么?您知道如何按连接到表的属性进行过滤吗
再次感谢大家,
Margots我建议您尝试使用$products->addAttributeToFilter…
而不是$products->addFieldToFilter…
-addField方法仅在字段位于您正在查询的主表上时有效(在本例中为目录\产品\实体
)。由于库存字段位于联接表中,因此需要使用addAttribute
希望这有帮助,
JD在查看引擎盖后,我了解到\u selectAttributes
实例字段未分配到Mage\u Eav\u Model\u Entity\u Collection\u Abstract
类中,这就是为什么出现异常的原因。一个解决方案通常是Jonathan Day在上面建议的方法—添加addAttributeToFilter()
方法。它将返回错误,因为它找不到目录/产品的此类属性。(存货中的数量
和在目录存货项目中
)。我发现两种解决问题的方法都需要朝着不同的方向走:
其中一种方法是查询我为ProductCollection设置的Select语句(见上文),但不知何故,它并没有用新产品重置集合。当我在phpMyAdmin中复制该Sql语句时,它起作用了,因此如何从产品集合中查询该语句:
$stmt = $products->getConnection('core_write')->query($products->getSelect()->__toString());
while($rows = $stmt->fetch(PDO::FETCH_ASSOC)){
echo "<br>Product Id ".$rows['entity_id'];
}
现在有一个集合,集合了quaty>0的所有产品以及库存。感谢您的重播,但是它不起作用。下面是我所做的:$products->addAttributeToFilter('is_in_stock',1);-或者-$products->addAttributeToFilter(数组(数组('attribute'=>'qty','gt'=>'0'));这是我继续得到的错误:未捕获的异常“Mage_Eav_exception”带有消息“无效属性名称:是库存中还是-未捕获的异常“Mage_Eav_exception”带有消息“无效属性名称:数量”有其他想法吗?对于那些正在寻找答案的人,可能会有所帮助。
$stmt = $products->getConnection('core_write')->query($products->getSelect()->__toString());
while($rows = $stmt->fetch(PDO::FETCH_ASSOC)){
echo "<br>Product Id ".$rows['entity_id'];
}
$stockItem = new Mage_CatalogInventory_Model_Stock_Item();
$stockItems->addQtyFilter('>',0);
$stockItems->addFieldToFilter('is_in_stock',array('eq'=>'1'));