web-dev-qa-db-fra.com

addAttributeToFilter et la condition OR dans la collection Magento

Je voudrais sélectionner des produits en fonction de plusieurs critères de différents attributs.

Je sais comment utiliser $collection->addAttributeToFilter('someattribute', array('like' => '%'));

Mais je voudrais utiliser plusieurs attributs pour [~ # ~] ou [~ # ~] condition.

Comme:

$collection->addAttributeToFilter('someattribute', array('like' => 'value'));`

OR

$collection->addAttributeToFilter('otherattribute', array('like' => 'value'));`

Pour obtenir des produits qui soit "someattribute" OU "otherattribute" défini sur "value"

C'est possible?

26
ÉricP

oui, ça l'est.

$collection->addAttributeToFilter(
    array(
        array('attribute' => 'someattribute', 'like' => 'value'),
        array('attribute' => 'otherattribute', 'like' => 'value'),
        array('attribute' => 'anotherattribute', 'like' => 'value'),
    )
);
57
Rito

Si vous souhaitez utiliser la même chose pour la fonction addFieldToFilter pour les collections qui n'utilisent pas l'EAV, vous pouvez utiliser le format suivant:

$collection->addFieldToFilter(
array(
   'someattribute',
   'otherattribute',
   'anotherattribute',
),
array(
    array('like' => 'value'),
    array('like' => 'value'),
    array('like' => 'value'),
));
11
George Donev

Une autre chose à considérer pour atteindre "OU" est:

->addFieldToFilter(
     'type_id',
     ['in' => ['simple', 'configurable']]
)
4
johnsnails

Pour addAttributeToFilter:

$collections = Mage::getModel('sales/order')->getCollection()
             ->addAttributeToFilter('increment_id', array('in' => $sellerIncrementIds))
             ->addAttributeToFilter('status', ['in' => ['pending','pending_seller_confirmation']]);
2
Hassan Ali Shahzad