Ce n'est pas une faute de frappe.
Je suis conscient que je dois utiliser «finset» pour filtrer mes attributs à sélection multiple; cependant, j'essaie de filtrer plusieurs valeurs à la fois et d'obtenir:
Incorrect parameter count in the call to native function 'FIND_IN_SET
.
Voici un exemple de code:
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]));
}
}
Ce que j'ai sur le frontend est un ensemble de champs, chaque ensemble correspond à un attribut spécifique et contient des cases à cocher pour chaque valeur d'attribut. Sur la base de ces soumissions, la collection devrait filtrer ce qui a été sélectionné.
Tout fonctionne très bien, sauf pour le cas unique où j'essaie de filtrer deux des options de sélection multiple en même temps. Si je n'en choisis qu'un, la recherche fonctionne correctement. Si j'en choisis deux ou plus, j'obtiens l'erreur MySQL mentionnée ci-dessus.
Des idées? Ou suis-je obligé d'utiliser des instructions SQL personnalisées pour créer ce filtre?
la source
catalog_product_index_eav_idx
tableau.Réponses:
D'après ce que je comprends, vous voulez envoyer 2 valeurs ou plus et les filtrer en utilisant
OR
.Quelque chose comme ça:
$v1 & $v2
sont les valeurs de vos cases à cocherPour cela, vous devez passer au
addAttributeToFilter
et au tableau de tableaux.Voici une implémentation possible.
la source
Ce code combinera deux
finset
conditions avecOR
:la source