Я создаю коллекцию продуктов, в которой можно найти результаты по атрибуту множественного выбора.
(соответствующий код, который добавляет finset в коллекцию - настроен для отображения реальных значений идентификаторов)
$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', 'measurement');
$value = array('finset' => array('237',
'236',
'235',
'234',
'233',));
$collection->addAttributeToFilter($attribute, $value);
Результирующий sql (с добавленным фильтром видимости) выглядит так:
SELECT DISTINCT
e . *,
at_measurement.value AS measurement,
at_visibility.value AS visibility
FROM
catalog_product_entity AS e
INNER JOIN
catalog_product_entity_varchar AS at_measurement ON (at_measurement.entity_id = e.entity_id) AND (at_measurement.attribute_id = '983') AND (at_measurement.store_id = 0)
INNER JOIN
catalog_product_entity_int AS at_visibility ON (at_visibility.entity_id = e.entity_id) AND (at_visibility.attribute_id = '526') AND (at_visibility.store_id = 0)
WHERE
(e.attribute_set_id IN ('74')) AND (FIND_IN_SET('237',
'236',
'235',
'234',
'233',
at_measurement.value)) AND (at_visibility.value IN ('2' , '4'))
GROUP BY e.entity_id
Проблема в том, что я получаю ошибку sql:
"SQLSTATE[42000]: Syntax error or access violation: 1582 Incorrect parameter count in the call to native function 'FIND_IN_SET'"
и я (думаю) я понимаю, почему: у некоторых значений множественного выбора есть только одна опция, таким образом, нет разделенных запятыми значений, чтобы претендовать на FINSET
Я прав в том, почему эта ошибка возникает? Как я могу написать этот объект коллекции для учета этого?
Если не выше, что я пропускаю?
Результаты запуска sql в MySQL Workbench, за исключением предложения find_in_set:
product-collection
multiselect-attribute
ProxiBlue
источник
источник
Ответы:
Попробуйте использовать addAttributeToFilter с или условием
Или
источник