Коллекция с набором "НАЙТИ В НАБОРЕ" по атрибутам множественного выбора, но у некоторых есть только одно значение


Я создаю коллекцию продуктов, которая будет находить результаты с помощью атрибута множественного выбора.

(соответствующий код, добавляющий 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'"

И я (думаю) понимаю, почему: некоторые из многозначных значений имеют только один вариант, поэтому для определения нет значений, разделенных запятыми для ФИНСЕТА

Правильно ли я понимаю, почему возникает эта ошибка? Как я могу написать этот объект коллекции, чтобы учесть это?

Если не вышеперечисленное, то чего мне не хватает?

Результаты выполнения sql в рабочей среде mysql за вычетом предложения find_in_set:

results checked in query editor

Author: ProxiBlue, 2014-02-06

1 answers

Попробуйте использовать addAttributeToFilter с условием или

$collection->addAttributeToFilter($attribute,
    array(
        array('finset'=> array('237')),
        array('finset'=> array('238')),
        array('finset'=> array('239')),
    )
);

Или

$collection->addAttributeToFilter(
    array(
        array('attribute'=> 'attributecode','finset' => array('237')),
        array('attribute'=> 'attributecode','finset' => array('237')),
        array('attribute'=> 'attributecode','finset' => array('237')),
    )
);
 28
Author: oleksii.svarychevskyi, 2014-02-06 16:44:53