Isso não é um erro de digitação.
Estou ciente de que preciso usar 'finset' para filtrar meus atributos de seleção múltipla; no entanto, estou tentando filtrar vários valores ao mesmo tempo e obter:
Incorrect parameter count in the call to native function 'FIND_IN_SET
.
Aqui está um exemplo de código:
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]));
}
}
O que tenho no front-end é um conjunto de campos, cada conjunto corresponde a um atributo específico e contém caixas de seleção para cada valor de atributo. Com base nesses envios, a coleção deve filtrar o que foi selecionado.
Tudo funciona muito bem, exceto no caso único em que tento filtrar duas opções de seleção múltipla ao mesmo tempo. Se eu escolher apenas um deles, a pesquisa funcionará corretamente. Se eu escolher dois ou mais, recebo o erro do MySQL mencionado acima.
Alguma ideia? Ou sou forçado a usar instruções SQL personalizadas para criar esse filtro?
fonte
catalog_product_index_eav_idx
tabela.Respostas:
Pelo que entendi, você deseja enviar 2 ou mais valores e filtrar por eles usando
OR
.Algo assim:
$v1 & $v2
são os valores das suas caixas de seleçãoPara isso, você precisa passar para a
addAttributeToFilter
matriz de matrizes.Aqui está uma possível implementação.
fonte
Este código combinará duas
finset
condições comOR
:fonte