При использовании метода коллекции 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)
));