Collections 加入后,不能按属性数量过滤-从库存中获取产品

Collections 加入后,不能按属性数量过滤-从库存中获取产品,collections,magento,Collections,Magento,你过去帮了我很大的忙,我不断地回来寻求帮助和学习 这一次,我试图获得所有数量大于1且有库存的产品(is_in_stock=1) 这将返回附加到产品表的数量和库存中的列。您可以按如下方式进行测试: $products->getFirstItem()->getQty(); $products->getFirstItem()->getIsInStock(); 当我尝试按数量进行筛选,并且有库存时,问题就开始了 $products->

你过去帮了我很大的忙,我不断地回来寻求帮助和学习

这一次,我试图获得所有数量大于1且有库存的产品(
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'));