Buduję kolekcję produktów, która znajdzie wyniki z atrybutu wielokrotnego wyboru.
(odpowiedni kod, który dodaje zestaw finset do kolekcji - dostosowany do wyświetlania rzeczywistych wartości identyfikatora)
$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', 'measurement');
$value = array('finset' => array('237',
'236',
'235',
'234',
'233',));
$collection->addAttributeToFilter($attribute, $value);
Wynikowy kod SQL (z dodanym filtrem widoczności) jest taki:
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
Problem polega na tym, że pojawia się błąd SQL:
"SQLSTATE[42000]: Syntax error or access violation: 1582 Incorrect parameter count in the call to native function 'FIND_IN_SET'"
i myślę, że rozumiem, dlaczego: Niektóre wartości wielokrotnego wyboru mają tylko jedną opcję, dlatego nie ma wartości oddzielonych przecinkami, które kwalifikowałyby się do FINSET
Czy mam rację, dlaczego pojawia się ten błąd? Jak mogę zapisać ten obiekt kolekcji, aby to uwzględnić?
Jeśli nie powyższe, czego mi brakuje?
Wyniki z uruchomienia sql w mysql workbench, pomniejszone o klauzulę find_in_set:
product-collection
multiselect-attribute
ProxiBlue
źródło
źródło
Odpowiedzi:
Spróbuj użyć addAttributeToFilter z parametrem lub condition
Lub
źródło