In EAV models, like the customer, addFieldToFilter
is an alias for addAttributeToFilter
and only works if the parameter ("read" in your case) is a real EAV attribute of the customer and not a field in the customer_entity
table, or any other table.
The error message hints that there is no attribute ($attribute->getBackend()
fails because there was no attribute found).
But if read
actually is a field in the entity table, you can tell the collection so, using addStaticField()
:
$collection->addStaticField('read')->addFieldToFilter('read', array('eq' => 0));
Update: I see that the field actually is from a joined table. You need to use joinAttribute
or joinField
to allow using the field for filters.
I assume, alireza_checkingout_checkingout
is a regular table, not an EAV entity:
Replace
->joinTable('alireza_checkingout_checkingout','alireza_customer_id=entity_id',array('alireza_customer_id','read'),null,'left')
with
->joinField('read', 'alireza_checkingout_checkingout', 'read', 'alireza_customer_id=entity_id')
You can even add the filter immediately, as joinField
has a $cond
parameter:
->joinField('read', 'alireza_checkingout_checkingout', 'read', 'alireza_customer_id=entity_id', '{table}.read=0')
The condition will be added to the ON
clause of the join, which is by default an INNER JOIN
, so the result is the same as using addFieldToFilter
.
Best Answer
Use:
Instead of: