পণ্য মডেল থেকে একটি নির্দিষ্ট [কাস্টম] পণ্য বৈশিষ্ট্যের জন্য কীভাবে মান সংরক্ষণ করবেন


12

পণ্য মডেল থেকে একটি নির্দিষ্ট [কাস্টম] পণ্য বৈশিষ্ট্যের মূল্য কীভাবে সংরক্ষণ করবেন ?

আমি থেকে স্ক্রিপ্ট নিচে পাওয়া যায় এখানে :

$product = Mage::getModel('catalog/product')->load(1); 

$product->setName('Some Random Name'); 

$product->getResource()->saveAttribute($product, 'name');

উত্তর:


32

এটি সম্পর্কে 2 টি উপায় আছে, একটি হ'ল ম্যাজেন্টো catalog/productমডেল পেয়ে আইডি দ্বারা পণ্যটি লোড করা যা আপনাকে পুরো পণ্য দেয়, তারপরে নামটি সেট করে সংরক্ষণ করে।

$product = Mage::getModel('catalog/product')->load(1);
$product->setName('foobar!');

try {
   $product->save();
} catch(Exception $e) {
  echo "{$e}";
}

যেমন ওপি নির্দেশ করেছেন, এটি কেবলমাত্র একটি বৈশিষ্ট্য পরিবর্তনের জন্য যথেষ্ট ভারী। আমি একপ্রকার বুঝতে পেরেছি যে অ্যাট্রিবিউট ভর আপডেট সরঞ্জামটি এটি করার জন্য একটি ক্লিনার উপায়ে ব্যবহার করতে হবে এবং Mage_Catalog_Model_Resource_Product_Actionক্লাসটি খুঁজে পেয়েছিল

$product_id = 1;
$store_id = 0;

$action = Mage::getModel('catalog/resource_product_action');
$action->updateAttributes(array($product_id), array(
    'name' => 'foobar!'
), $store_id);

[আপডেট] মাপদণ্ড

তাই একটি দ্রুত বেঞ্চমার্ক স্ক্রিপ্ট এবং ফলাফলগুলি নিজেরাই কথা বলেছিল।

$starttime = microtime(true);

for ($i=20; $i>0; $i--)
{
    $action = Mage::getModel('catalog/resource_product_action');
    $action->updateAttributes(array(1), array(
        'name' => 'foobar!'
    ), 0);
}

echo "Time: " . (microtime(true) - $starttime) . " seconds\n";

$starttime = microtime(true);

for ($i=20; $i>0; $i--)
{
    $product = Mage::getModel('catalog/product')->load(1);
    $product->setName('foobar!');
    $product->save();
    unset($product);
}

echo "Time: " . (microtime(true) - $starttime) . " seconds\n";

সময়: 0.076527833938599 সেকেন্ড

সময়: 4.757472038269 সেকেন্ড


উত্তরের জন্য ধন্যবাদ তবে উপরের স্ক্রিপ্টটি মডেলটি লোড হওয়ার পরে বেশি সময় নেয় .উত্তর জন্য ধন্যবাদ তবে উপরের স্ক্রিপ্টটিতে মডেলটি লোড হওয়ার পরে বেশি সময় নেয়।
রনি

আমি
কোডটির

আপনাকে স্বাগতম. আমি ইতিমধ্যে 2 আমদানি স্ক্রিপ্টগুলিতে ইতিমধ্যে প্রয়োগ করেছি এবং এটি অনেক সময় সাশ্রয় করে।
স্যান্ডার মঞ্জেল

ছোট প্রশ্ন: আপনি যে উত্তরটি খুঁজছিলেন তা কি এটি ছিল না? যদি আমাকে না জানায় তবে তা হলে দয়া করে আমাদের উত্তর প্রশ্নের উত্তর বাড়িয়ে রাখতে প্রশ্নটি বন্ধ করুন :)
স্যান্ডার ম্যানগেল

11

আপনার যদি কেবল একটি বৈশিষ্ট্য সংরক্ষণ করতে হয় এবং আপনার ইতিমধ্যে পণ্য লোড করা থাকে তবে আপনি এই পদ্ধতিটিও ব্যবহার করতে পারেন:

$product->setData('attribute_code',$someData);
$product->getResource()->saveAttribute($product,'attribute_code');

এই পদ্ধতি তুলনায় অনেক দ্রুত catalog/resource_product_action


পোস্টটি আপ টু ডেট রাখার জন্য আপনাকে ধন্যবাদ। তবে আমি একটি অদ্ভুত আচরণ দেখতে পাচ্ছি। এই সংরক্ষণের মতো আমাকে সর্বদা সেরা সময় দেয়। তবে ইদানীং 2 ম্যাজেন্টোতে EE এর উদাহরণস্বরূপ এটি সংরক্ষণও সম্পূর্ণ করতে সময় লাগে। এই উদাহরণে কিছু এক্সটেনশনের কারণে এটি হতে পারে। আমি অন্য কোনও ইস্যু নিয়ে ভাবতে পারি না। এই ম্যাজেন্টো দৃষ্টান্তগুলি বর্তমানে স্থানীয় ডেভ সিস্টেম দ্বারা চালু রয়েছে এবং এখনও এটি একটি পরীক্ষার সার্ভারের দৃষ্টান্তে স্থানান্তর করতে পারে নি।
zapping

@ ফেরাতে আপনার একই মানদণ্ড চালানো উচিত যে স্যান্ডার দৌড়েছিল - ভাল তুলনা হতে পারে!
রবি অ্যাভারিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.