Magento - Filtre de Collection par la Matrice de Maintenir l'Ordre
Est-il possible de filtrer un Magento collection à l'aide d'un tableau d'id MAIS avoir les résultats de la collecte ordonnée par l'ordre de l'id est passé au filtre.
Par exemple:
$collection = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToFilter('entity_id', array(
'in' => array(1, 3, 2),
));
Je voudrais de la collection ont des produits dans l'ordre, 1,3,2 de sorte que lorsqu'une boucle dans la collection qu'ils sortent dans l'ordre?
La seule alternative que j'ai actuellement est de créer manuellement une gamme de produits:
$productIds = array(1,3,2);
$collection = array();
foreach($productIds as $productId) {
$collection[] = Mage::getModel('catalog/product')->load($productId);
}
De toute évidence, cela fonctionne, mais semble comme une vilaine façon de le faire.
est-il un moyen de le faire purement via magento collections?
OriginalL'auteur | 2012-07-17
Vous devez vous connecter pour publier un commentaire.
OriginalL'auteur Drew Hunter
Assez vieux, mais d'une solution simple que j'ai trouvé sur stackoverflow est
à partir d'ici sur stackoverflow
OriginalL'auteur Haris
Vous pouvez charger de la collecte avant le tri en PHP. Par exemple :
D'autre, uniquement avec des collections, vous devez d'abord passer par la
Zend_Db_Select
objet de la collection, pour être en mesure de trier les expressions (ce qui peut ne pas être possible avec par exemple les EAV des collections et des appels àaddAttributeToSort
ousortOrder
).Ensuite, vous pouvez soit utiliser plusieurs
order
appels comme indiqué dans Gershon réponse, ou de l'utilisation d'un seulorder
d'unCASE WHEN THEN
déclaration. Sachant qu'il pouvait compter sur le nombre maximum de Id, vous pouvez avoir à filtrer.OriginalL'auteur blmage
C'est une question difficile, voici une solution qui devrait fonctionner:
OriginalL'auteur Gershon Herczeg