كيف يمكنك تعيين السعر الخاص للمنتج في الماجنتو عبر استعلام SQL المباشر؟

magento.stackexchange https://magento.stackexchange.com//questions/45724

  •  12-12-2019
  •  | 
  •  

سؤال

أحتاج إلى تحديث السعر الخاص بشكل جماعي من ملف CSV (الذي يخبرني برقم SKU والسعر الخاص من/إلى التاريخ).

في الوقت الحالي أفعل ذلك باستخدام طريقة نماذج الماجنتو مثل هذا (بعد تحليل صفوف CSV) في حلقة foreach:

$p = Mage::getModel('catalog/product');
$product_id = $p->getIdBySku($product['SKU']);
if (!$product_id) {
    throw new Exception('Product Does Not Exists');
}
$p->setStoreId($store_id)->load($product_id);
$p->setSpecialPrice(floatval($product['Price']));
$p->setSpecialFromDate($product['FromDate']);
$p->setSpecialFromDateIsFormated(true);
$p->setSpecialToDate($product['ToDate']);
$p->setSpecialToDateIsFormated(true);
$p->save();
$p = null;

يعد هذا أمرًا جيدًا عندما تحتاج مجموعة من المنتجات إلى التحديث.ومع ذلك، عندما تقوم بتحديث أكثر من 100 منتج، يصبح هذا بطيئًا بشكل لا يصدق ويؤثر على أداء الموقع أيضًا.

هل يمكنني بأي حال من الأحوال استيراد سعر خاص بكميات كبيرة وكذلك تحديد التواريخ عبر استعلام SQL مباشر؟


أثناء البحث في هذه المشكلة، وجدت حلاً ممكنًا (استنادًا إلى هذه المقالة http://fishpig.co.uk/magento/tutorials/update-prices-sql) مع تحديد special_price في قاعدة البيانات مباشرة مثل هذا:

ملحوظة: دينار بحريني_ هي بادئة الجدول الخاص بي

UPDATE bd_catalog_product_entity AS CPE
INNER JOIN bd_catalog_product_entity_decimal AS CPED ON CPED.entity_id = CPE.entity_id
SET CPED.`value` = 2.99 -- New Special Price
WHERE
    CPED.attribute_id = (
        SELECT
            attribute_id
        FROM
            bd_eav_attribute eav
        WHERE
            eav.entity_type_id = 4
        AND eav.attribute_code = 'special_price'
    )
AND CPED.store_id = 1   -- Retail Store
AND CPE.sku = 'ABS049'  -- Sku Being Updated

هذا يبدو للعمل (أستطيع أن أرى القيمة في واجهة المستخدم الماجنتو محدثة).لست متأكدًا بعد مما إذا كانت هذه هي الطريقة الصحيحة لتحديد السعر الخاص في قاعدة البيانات مباشرةً.

كما أنني لم أتوصل بعد إلى كيفية ضبط from/to بلح.

أي مساعدة في هذا سيكون موضع تقدير كبير.

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

المحلول

دعنا نقول ذلك $storeId هو المتجر الذي تريد تحديث السعر له $specialPrice هو سعرك الخاص، $sku هو رمز SKU لمنتجك، $fromDate و $toDate هي...حسنًا، لقد فهمت الفكرة.

الآن قم بتشغيل هذا الكود:

$id = Mage::getSingleton('catalog/product')->getIdBySku($sku);
if ($id) {
    Mage::getSingleton('catalog/product_action')->updateAttributes(
        array($id), //array with ids to update
        array( //array with attributes to update
            'special_price' => $specialPrice,
            'special_from_date' => $fromDate,
            'special_to_date' => $toDate,
        ),
        $storeId //store id to update. If you want to update the global value use 0 in here
    );
}

نصائح أخرى

إذا كنت ترغب في تحديث المنتجات الحالية، فلا داعي لإجراء التغييرات يدويًا.ما عليك سوى استيراد ملف CSV الذي يجب أن يحتوي فقط على تلك السمات كأعمدة مطلوبة للتحديث.SKU حقل مطلوب لذا لا تنس تضمينه في ملف CSV الخاص بك.

وسوف تستورد المنتجات بسرعة كبيرة.

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