سؤال

أحاول فرز مجموعة منتجات حسب SKU بناءً على الترتيب الذي تظهر به وحدات SKU في مصفوفة $skus التي تم تمريرها إلى أسلوب addAttributeToFilter في المجموعة أدناه:

    $skus = explode(",",$this->getRequest()->getParam('skus'));

    $collection = Mage::getModel('catalog/product')->getCollection()
                    ->addAttributeToSelect('*')
                    ->addAttributeToFilter('sku',array('in'=>$skus))
                    ->addAttributeToFilter('visibility',array('gt'=>array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE)))
                    ->addAttributeToFilter('status',array('eq'=> Mage_Catalog_Model_Product_Status::STATUS_ENABLED))
                    ->addUrlRewrite()
    ;

كيف يمكنني فرز هذه المجموعة بحيث تظهر المنتجات بنفس ترتيب رموز التعريف الخاصة بها داخل مصفوفة $skus؟

هل كانت مفيدة؟

المحلول

لقد فعلت شيئًا مشابهًا باستخدام MySQL FIELD() وظيفة.ربما يمكن أن يساعدك أيضًا هنا.

بعد إضافة المرشحات الأخرى إلى مجموعتك، اتصل بهذا:

$collection->getSelect()->order(new Zend_Db_Expr('FIELD(sku, "' . implode('","', $skus) . '") DESC'));

نصائح أخرى

عند إنشاء مجموعة باستخدام Mage::getModel('catalog/product')->getCollection() أو Mage::getResourceModel('catalog/product_collection') جدول التجميع الرئيسي هو catalog_product_entity.يحتوي هذا الجدول على sku العمود الذي تمت فهرسته أيضًا، لذلك يكون من الأكثر فعالية التصفية والفرز حسب هذا العمود في الجدول الرئيسي.هذا من شأنه أن يعطيك شيئا مثل:

$collection = Mage::getResourceModel('catalog/product_collection');
$collection
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('visibility',array('gt'=>array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE)))
    ->addAttributeToFilter('status',array('eq'=> Mage_Catalog_Model_Product_Status::STATUS_ENABLED))
    ->addUrlRewrite();

$collection->getSelect()
    ->where('sku IN (?)', $skus)
    ->order('sku DESC');

لا تحتاج إلى القيام بأي شيء آخر لطلب المجموعة حيث أنك تقوم بالفعل بالتصفية حسب SKU.

أود أيضًا أن أوصيك بعدم القيام بذلك فقط ->addAttributeToSelect('*'), ، بدلاً من ذلك أضف السمات التي تحتاجها فقط.نظرًا لبنية EAV لجداول المنتجات، فإن كل سمة تتم إضافتها ستضيف تعقيدًا إلى استعلام قاعدة البيانات وتجعل الاستدعاء أقل كفاءة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top