Magento: использование OR в addAttributeToFilter
Magento позволяет применять фильтры для своих коллекций. Для этого используется метод addAttributeToFilter (из класса Mage_Eav_Model_Entity_Collection_Abstract).
Базовое использование этого метода следующее:
1 2 3 |
<span style='color:#7f0055; background:#ffffe8; '><?php</span><span style='color:#000000; background:#ffffe8; '></span> <span style='color:#000000; background:#ffffe8; '>addAttributeToFilter</span><span style='color:#000000; background:#ffffe8; '>(</span><span style='color:#000000; background:#ffffe8; '>имя_атрибута</span><span style='color:#000000; background:#ffffe8; '>,</span><span style='color:#000000; background:#ffffe8; '> значение</span><span style='color:#000000; background:#ffffe8; '>)</span><span style='color:#000000; background:#ffffe8; '></span> <span style='color:#7f0055; background:#ffffe8; '>?></span> |
Но иногда возникает необходимость отфильтровать Magento коллекцию по нескольким атрибутам, используя логическое “ИЛИ”.
Следующий пример показывает как получить коллекцию пользователей по заданному имени или email:
1 2 3 4 5 6 7 |
<span style='color:#7f0055; background:#ffffe8; '><?php</span><span style='color:#000000; background:#ffffe8; '></span> <span style='color:#000000; background:#ffffe8; '>$collection</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#000000; background:#ffffe8; '>=</span><span style='color:#000000; background:#ffffe8; '> Mage</span><span style='color:#000000; background:#ffffe8; '>::</span><span style='color:#000000; background:#ffffe8; '>getModel</span><span style='color:#000000; background:#ffffe8; '>(</span><span style='color:#2a00ff; background:#ffffe8; '>'customer/customer'</span><span style='color:#000000; background:#ffffe8; '>)</span><span style='color:#000000; background:#ffffe8; '>-</span><span style='color:#000000; background:#ffffe8; '>></span><span style='color:#000000; background:#ffffe8; '>getCollection</span><span style='color:#000000; background:#ffffe8; '>(</span><span style='color:#000000; background:#ffffe8; '>)</span><span style='color:#000000; background:#ffffe8; '></span> <span style='color:#000000; background:#ffffe8; '>            </span><span style='color:#000000; background:#ffffe8; '>-</span><span style='color:#000000; background:#ffffe8; '>></span><span style='color:#000000; background:#ffffe8; '>addAttributeToFilter</span><span style='color:#000000; background:#ffffe8; '>(</span><span style='color:#7f0055; background:#ffffe8; font-weight:bold; '>array</span><span style='color:#000000; background:#ffffe8; '>(</span><span style='color:#000000; background:#ffffe8; '></span> <span style='color:#000000; background:#ffffe8; '>                </span><span style='color:#7f0055; background:#ffffe8; font-weight:bold; '>array</span><span style='color:#000000; background:#ffffe8; '>(</span><span style='color:#2a00ff; background:#ffffe8; '>'attribute'</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#000000; background:#ffffe8; '>=</span><span style='color:#000000; background:#ffffe8; '>></span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#2a00ff; background:#ffffe8; '>'firstname'</span><span style='color:#000000; background:#ffffe8; '>,</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#2a00ff; background:#ffffe8; '>'like'</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#000000; background:#ffffe8; '>=</span><span style='color:#000000; background:#ffffe8; '>></span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#2a00ff; background:#ffffe8; '>'</span><span style='color:#2a00ff; background:#ffffe8; '>%</span><span style='color:#2a00ff; background:#ffffe8; '>developer</span><span style='color:#2a00ff; background:#ffffe8; '>%</span><span style='color:#2a00ff; background:#ffffe8; '>'</span><span style='color:#000000; background:#ffffe8; '>)</span><span style='color:#000000; background:#ffffe8; '>,</span><span style='color:#000000; background:#ffffe8; '></span> <span style='color:#000000; background:#ffffe8; '>                </span><span style='color:#7f0055; background:#ffffe8; font-weight:bold; '>array</span><span style='color:#000000; background:#ffffe8; '>(</span><span style='color:#2a00ff; background:#ffffe8; '>'attribute'</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#000000; background:#ffffe8; '>=</span><span style='color:#000000; background:#ffffe8; '>></span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#2a00ff; background:#ffffe8; '>'email'</span><span style='color:#000000; background:#ffffe8; '>,</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#2a00ff; background:#ffffe8; '>'like'</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#000000; background:#ffffe8; '>=</span><span style='color:#000000; background:#ffffe8; '>></span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#2a00ff; background:#ffffe8; '>'</span><span style='color:#2a00ff; background:#ffffe8; '>%</span><span style='color:#2a00ff; background:#ffffe8; '>magento</span><span style='color:#2a00ff; background:#ffffe8; '>%</span><span style='color:#2a00ff; background:#ffffe8; '>'</span><span style='color:#000000; background:#ffffe8; '>)</span><span style='color:#000000; background:#ffffe8; '>,</span><span style='color:#000000; background:#ffffe8; '></span> <span style='color:#000000; background:#ffffe8; '>            </span><span style='color:#000000; background:#ffffe8; '>)</span><span style='color:#000000; background:#ffffe8; '>)</span><span style='color:#000000; background:#ffffe8; '>;</span><span style='color:#000000; background:#ffffe8; '></span> <span style='color:#7f0055; background:#ffffe8; '>?></span> |
Общую информацию по работе с Varien data collections можно найти на официальном Magento Knowledge Base