Это не опечатка.
Я знаю, что мне нужно использовать 'finset' для фильтрации моих атрибутов множественного выбора; Тем не менее, я пытаюсь отфильтровать несколько значений одновременно и получаю:
Incorrect parameter count in the call to native function 'FIND_IN_SET
,
Вот пример кода:
foreach ($options as $option) {
// $option[0] contains an attribute ID as a string
$attribute = Mage::getModel('catalog/resource_eav_attribute')->load($option[0]);
if ($attribute->getFrontendInput() == 'multiselect') {
$collection->addAttributeToFilter($attribute->getAttributeCode(), array('finset' => $option[1]));
} else {
$collection->addAttributeToFilter($attribute->getAttributeCode(), array('in' => $option[1]));
}
}
На веб-интерфейсе у меня есть набор полей, каждый набор соответствует определенному атрибуту и содержит флажки для каждого значения атрибута. На основании этих представлений коллекция должна отфильтровать то, что было выбрано.
Все прекрасно работает, за исключением одного случая, когда я пытаюсь отфильтровать две опции множественного выбора одновременно. Если я выберу только один из них, поиск будет работать правильно. Если я выбираю два или более, я получаю ошибку MySQL, упомянутую выше.
Любые идеи? Или я вынужден использовать пользовательские операторы SQL для создания этого фильтра?
источник
catalog_product_index_eav_idx
таблице.Ответы:
Из того, что я понимаю, вы хотите отправить 2 или более значений и отфильтровать их, используя
OR
.Что-то вроде этого:
$v1 & $v2
значения ваших флажковДля этого вам нужно перейти к
addAttributeToFilter
массиву и.Вот возможная реализация.
источник
Этот код будет сочетать два
finset
условия сOR
:источник