Magento addFieldToFilter разрешает NULL

При использовании метода коллекции Magento addFieldToFilter можно разрешить фильтрацию по значениям NULL? Я хочу выбрать все продукты в коллекции, у которых есть настраиваемый атрибут, даже если для атрибута не назначено значение.

Ответ 1

Вам не нужно использовать addFieldToFilter.

теперь решение:
имя атрибута известно как code в magento, вам просто нужно использовать приведенный ниже код, чтобы получить все продукты, которые имеют определенный атрибут в виде массива


$prodsArray=Mage::getModel('catalog/product')->getCollection()
                                  ->addAttributeToFilter('custom_attribute_code')
                                  ->getItems();

вы также можете указать определенные условия для значения атрибута в addAttributeToFilter во втором параметре addAttributeToFilter.

вы можете найти этот метод в этом файле (для дальнейшего изучения):

app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php

Ответ 2

Я вижу, что вы уже нашли решение, но есть и эта опция:

$collection->addFieldToFilter('parent_item_id', array('null' => true));

Но если вы хотите использовать "NULL" = > false, который НЕ РАБОТАЕТ. (и я заметил, что вы можете использовать такие элементы, как "in", "nin", "eq", "neq", "gt" ), вы можете сделать это:

$collection->addFieldToFilter('parent_item_id', array('neq' => 'NULL' ));

Надеюсь, это по-прежнему полезно...

Ответ 3

Это работает для фильтров NOT NULL.

$collection->addFieldToFilter('parent_item_id', array('notnull' => true));

Ответ 4

Фильтрация коллекции товаров с помощью атрибутов null/empty имеет два возможных решения. Magento использует INNER JOIN для захвата значений атрибутов для фильтрации. НО, если атрибуту продукта не присвоено значение, соединение завершится неудачно, так как отсутствует таблица/отношение базы данных.

Решение № 1: Используйте addAttributeToFilter() и измените тип соединения с "внутреннего" (по умолчанию) на "слева":

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToFilter('custom_attribute', array( ... condition options ..), 'left');

Решение №2: Убедитесь, что ваш пользовательский атрибут имеет значение по умолчанию. Magento консервативен в этом отношении. Magento создаст связь между атрибутом и продуктом, если для атрибута задано значение. Таким образом, при отсутствии заданного пользователем значения или значения по умолчанию атрибут не будет доступен для фильтрации продукта, даже если атрибут отображается в представлении подробного описания продукта под панелью администратора.

Ответ 5

Поскольку вопрос не соответствует точно названию вопроса, и я нашел их несколько раз, выполнив поиск такого типа: special VALUE или NULL

Если вы хотите отфильтровать коллекцию, соответствующую VALUE или NULL, вы можете использовать:

$collection->addFieldToFilter('<attribute>', array(
  array('eq' => '<value>'),
  array('null' => true)
));