จะระบุลำดับการจัดเรียงแบบกำหนดเองสำหรับการรวบรวมผลิตภัณฑ์ได้อย่างไร


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, 311310,311, 312

เป็นไปได้โดยไม่ใช้แบบสอบถาม MySQL ธรรมดาตามที่ระบุด้านล่าง?

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

คำตอบ:


18

Sadento 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 ไปด้านบนได้หรือไม่?
Tahir Yasin

คุณสามารถเพิ่มหลาย ๆ ฟิลด์ในคำสั่งนี้ได้โดยใช้ไวยากรณ์FIELD(x, 1, 2, 3), FIELD(y, 3, 2, 1)
David Manners
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.