自定义客户属性-查找没有条目的客户


custom customer attribute - find customers with no entry

我为客户实体创建了一个名为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"。有了它,它就工作了!