Estoy creando una colección de productos, que encontrará resultados de un atributo de selección múltiple.
(código relevante que agrega finset a la colección, ajustado para mostrar valores de identificación reales)
$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', 'measurement');
$value = array('finset' => array('237',
'236',
'235',
'234',
'233',));
$collection->addAttributeToFilter($attribute, $value);
El sql resultante (con filtro de visibilidad agregado) es como tal:
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
El problema es que me sale un error sql:
"SQLSTATE[42000]: Syntax error or access violation: 1582 Incorrect parameter count in the call to native function 'FIND_IN_SET'"
y (creo) puedo ver por qué: algunos de los valores de selección múltiple tienen solo una opción, por lo tanto, no hay valores separados por comas para calificar para FINSET
¿Estoy en lo cierto por qué se produce este error? ¿Cómo puedo escribir este objeto de colección para dar cuenta de esto?
Si no es lo anterior, ¿qué me estoy perdiendo?
Los resultados de ejecutar sql en mysql workbench, menos la cláusula find_in_set:
product-collection
multiselect-attribute
ProxiBlue
fuente
fuente
Respuestas:
Intente usar addAttributeToFilter con o condición
O
fuente