我为客户实体创建了一个名为invoice_email的自定义属性。我现在要做的是获取所有客户,其中invoice_email尚未填充。我试过的:
Mage::getModel('customer/customer')->getCollection()
->addAttributeToFilter('invoice_email', array('eq' => ''))
这行不通。我的数据库中有一千多个客户的invoice_email字段是空的,因此得到的0项是错误的。如果我用另一种方式,比如
Mage::getModel('customer/customer')->getCollection()
->addAttributeToFilter('invoice_email', array('neq' => ''))
它工作得很好,返回6个条目。当我输出查询时,它看起来像这样:
SELECT `e`.*, `at_invoice_email`.`value` AS `invoice_email` FROM `customer_entity` AS `e` INNER JOIN `customer_entity_varchar` AS `at_invoice_email` ON (`at_invoice_email`.`entity_id` = `e`.`entity_id`) AND (`at_invoice_email`.`attribute_id` = '292') WHERE (`e`.`entity_type_id` = '1') AND (at_invoice_email.value = '')
所以问题似乎是内连接,如果我把它改为左连接和值= "到值是NULL它的工作原理。有办法处理这个问题吗?
谢谢!
您需要添加此属性以选择并设置连接类型为left
$collection = Mage::getResourceModel('customer/customer_collection');
$collection->addAttributeToSelect('invoice_email', 'left');
$collection->addAttributeToFilter('invoice_email', array('null' => true));
你可以试试:
Mage::getModel('customer/customer')->getCollection()
->addAttributeToFilter('invoice_email', array('null' => true));
结果是有一个选项强制一个jet join:
->addAttributeToFilter('invoice_email', array('null' => true), 'left')
最重要的部分是最后一个参数"left"。有了它,它就工作了!