Magento addFieldToFilter允许NULL

lee*_*ers 10 magento

使用Magento集合方法时,addFieldToFilter是否可以允许按NULL值进行过滤?我想选择集合中具有自定义属性的所有产品,即使没有为该属性赋值.

小智 54

我看到你已经找到了解决方案,但也有这个选项:

$collection->addFieldToFilter('parent_item_id', array('null' => true));
Run Code Online (Sandbox Code Playgroud)

但是如果你想使用"NULL"=> false,那就不行了.(我注意到你可以使用诸如"in","nin","eq","neq","gt"等元素,你可以这样做:

$collection->addFieldToFilter('parent_item_id', array('neq' => 'NULL' ));
Run Code Online (Sandbox Code Playgroud)

希望这仍然有用......

  • 请参阅Varien_Data_Collection_Db :: _ getConditionSql()代码中的文档.它描述了所有可能的选项,如提到的'null',但也反过来说'notnull'. (4认同)

小智 23

这适用于NOT NULL过滤器

$collection->addFieldToFilter('parent_item_id', array('notnull' => true));
Run Code Online (Sandbox Code Playgroud)


lee*_*ers 19

通过null/empty属性过滤产品集合有两种可能的解决方案.Magento使用INNER JOIN来获取要过滤的属性值.但是,如果未为product属性分配值,则连接将失败,因为缺少数据库表/关系.

解决方案#1:使用addAttributeToFilter()并将连接类型从"inner"(默认值)更改为"left":

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToFilter('custom_attribute', array( ... condition options ..), 'left');
Run Code Online (Sandbox Code Playgroud)

解决方案#2:确保您的自定义属性具有默认值.Magento在这方面很保守.如果为属性赋值,Magento将仅创建属性和产品之间的关系.因此,在没有用户指定的值或默认值的情况下,即使属性出现在管理面板下的产品详细信息视图中,也无法访问该属性以过滤产品.

  • 左联盟策略运作良好.看起来这个答案已经很老了,但无论如何我还要说谢谢! (3认同)

小智 7

因为问题与问题的标题不完全匹配,我通过搜索以下条件多次找到它们:special VALUE OR NULL

如果要过滤匹配 VALUE OR NULL 的集合,则可以使用:

$collection->addFieldToFilter('<attribute>', array(
  array('eq' => '<value>'),
  array('null' => true)
));
Run Code Online (Sandbox Code Playgroud)


Ali*_*ani 2

你不需要使用addFieldToFilter.

现在解决方案:
属性名称在magento中被称为code,您只需使用下面的代码即可获取具有特定属性的所有产品作为数组


$prodsArray=Mage::getModel('catalog/product')->getCollection()
                                  ->addAttributeToFilter('custom_attribute_code')
                                  ->getItems();

addAttributeToFilter您还可以在 addAttributeToFilter 的第二个参数中 为属性值指定某些条件。

您可以在此文件中找到此方法(以供进一步研究):

app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php
Run Code Online (Sandbox Code Playgroud)