Eso no es un error tipográfico.
Soy consciente de que necesito usar 'finset' para filtrar mis atributos de selección múltiple; Sin embargo, estoy tratando de filtrar varios valores a la vez y obtengo:
Incorrect parameter count in the call to native function 'FIND_IN_SET
.
Aquí hay un código de muestra:
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]));
}
}
Lo que tengo en la interfaz es un conjunto de campos, cada conjunto corresponde a un atributo específico y contiene casillas de verificación para cada valor de atributo. Según estas presentaciones, la colección debe filtrar lo que se ha seleccionado.
Todo funciona muy bien, excepto el caso único en el que intento filtrar dos de las opciones de selección múltiple al mismo tiempo. Si solo elijo uno de ellos, la búsqueda funciona correctamente. Si elijo dos o más, obtengo el error de MySQL mencionado anteriormente.
¿Algunas ideas? ¿O me veo obligado a usar sentencias SQL personalizadas para construir este filtro?
fuente
catalog_product_index_eav_idx
tabla.Respuestas:
Por lo que entiendo, desea enviar 2 o más valores y filtrarlos usando
OR
.Algo como esto:
$v1 & $v2
son los valores de tus casillas de verificaciónPara eso necesita pasar a la
addAttributeToFilter
matriz de matrices.Aquí hay una posible implementación.
fuente
Este código combinará dos
finset
condiciones conOR
:fuente