उत्पाद संग्रह के लिए कस्टम सॉर्ट ऑर्डर कैसे निर्दिष्ट करें?


12

मैं उत्पादों की सरणी के आधार पर एक उत्पाद संग्रह बनाने की कोशिश कर रहा हूं, और आईडी सरणी के आधार पर संग्रह को भी सॉर्ट कर सकता हूं।

$productIds = array(318,310,311);
$collection = Mage::getModel('catalog/product')
        ->getCollection()
        ->setOrder('entity_id', 'asc') // This will not do the job
        ->addAttributeToSelect('*')
        ->addAttributeToFilter('status', 1)
        ->addAttributeToFilter('entity_id', array(
    'in' => $productIds,
        ));

मैं संग्रहित सॉर्ट करना चाहता हूं क्योंकि वे $productIdsसरणी में दिखाई देते हैं, 318, 310, 311लेकिन ऊपर कोड संग्रह की तरह वापस आ जाएगा 310,311, 312

जैसा कि नीचे दिए गए सादे MySQL क्वेरी का उपयोग किए बिना यह संभव है?

SELECT *
FROM catalog_product_entity
WHERE entity_id IN (318,
                    310,
                    311)
ORDER BY FIELD(entity_id, 318, 310, 311);

जवाबों:


18

अफसोस की बात है कि Magento Varien_Data_Collection_Db _setOrderफ़ंक्शन में आदेश विकल्पों को मान्य करेगा । लेकिन आप संग्रह का चयन कर सकते हैं और जैसा चाहें ऑर्डर बनाने के लिए एक नई अभिव्यक्ति जोड़ सकते हैं।

/* @var $collection Mage_Catalog_Model_Resource_Product_Collection */
$collection = Mage::getModel('catalog/product')
    ->getCollection()
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('status', 1)
    ->addAttributeToFilter('entity_id', array(
            'in' => $productIds,
        ));

$collection->getSelect()->order(new Zend_Db_Expr('FIELD(e.entity_id, ' . implode(',', $productIds).')'));

foreach($collection as $product) {
    var_dump($product->getId());
}

यहां आपको यह देखना चाहिए कि उत्पाद आईडी सरणी के क्रम में हैं।


यह काम करता हैं! धन्यवाद। क्या हम SKU द्वारा उपरोक्त प्रकार को मिला सकते हैं?
ताहिर यासीन

आप सिंटैक्स द्वारा इस क्रम में कई फ़ील्ड जोड़ सकते हैंFIELD(x, 1, 2, 3), FIELD(y, 3, 2, 1)
डेविड मैनर्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.