使用Magento集合方法时,addFieldToFilter是否可以允许按NULL值进行过滤?我想选择集合中具有自定义属性的所有产品,即使没有为该属性赋值。
答案 0 :(得分:53)
我看到你已经找到了解决方案,但也有这个选项:
$collection->addFieldToFilter('parent_item_id', array('null' => true));
但是如果你想使用“NULL”=>是的,哪些不起作用。 (我注意到你可以使用诸如“in”,“nin”,“eq”,“neq”,“gt”等元素,你可以这样做:
$collection->addFieldToFilter('parent_item_id', array('neq' => 'NULL' ));
希望这仍然有用......
答案 1 :(得分:21)
这适用于NOT NULL过滤器
$collection->addFieldToFilter('parent_item_id', array('notnull' => true));
答案 2 :(得分:19)
通过null / empty属性过滤产品集合有两种可能的解决方案。 Magento使用INNER JOIN来获取要过滤的属性值。但是,如果未为product属性分配值,则连接将失败,因为缺少数据库表/关系。
解决方案#1:使用addAttributeToFilter()并将连接类型从“内部”(默认值)更改为“左侧”:
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToFilter('custom_attribute', array( ... condition options ..), 'left');
解决方案#2:确保您的自定义属性具有默认值。 Magento在这方面很保守。如果为属性赋值,Magento将仅创建属性和产品之间的关系。因此,在没有用户指定的值或默认值的情况下,即使该属性出现在管理面板下的产品详细信息视图中,也无法访问该属性以过滤产品。
答案 3 :(得分: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
答案 4 :(得分:2)
因为问题与问题的标题不完全匹配,我通过搜索以下条件多次找到它们:特殊值或空白
如果要过滤与VALUE OR NULL匹配的集合,则可以使用:
$collection->addFieldToFilter('<attribute>', array(
array('eq' => '<value>'),
array('null' => true)
));