পুরো পণ্যটিকে Magento2 এ সঞ্চয় করার পরিবর্তে কীভাবে কেবলমাত্র নির্দিষ্ট বৈশিষ্ট্যটির মান সংরক্ষণ করতে হয়


10

আপনারা যেমন ইতিমধ্যে জানেন যে আমরা এর মতো নির্দিষ্ট বৈশিষ্ট্যটির মান সংরক্ষণ করতে ম্যাজেন্টোতে এই নীচের পদ্ধতিটি ব্যবহার করতাম

// saving product attribute
$product = Mage::getModel('catalog/product')->load('id here');
$product->setName('your name here');
$product->getResource()->saveAttribute($product, 'name');

অথবা

// saving customer attribute
$customer->setData($attrCode, $value)->getResource()->saveAttribute($customer, $attrCode);

কেউ কি আমাকে Magento2 এ উপরের বিকল্পটি জানতে দিতে পারেন ।

উত্তর:


8

এটি ম্যাজেন্টো 1 এর সমান

$dataobject->setData('attribute_code', $value);
$dataobject->getResource()->saveAttribute($dataobject, 'attribute_code');

এটি যে কোনও সত্তার পক্ষে কাজ করবে।

@ রাফেলের উত্তর অনুসারে এটি বিক্রয় বৈশিষ্ট্যের জন্য কাজ করবে না।

মূলত এটি ম্যাজেন্টোকে \ ইভ \ মডেল \ সত্তা \ অ্যাবস্ট্রাক্ট এন্টিটি :: saveAttribute () ফাংশন বলে।

এটি দুটি পরামিতি গ্রহণ করবে

saveAttribute(\Magento\Framework\DataObject $object, $attributeCode)

প্রথমটি $objectহ'ল একটি অবজেক্ট যা আপডেট করা দরকার এবং দ্বিতীয় প্যারামিটারটি $attributeCodeহ'ল বৈশিষ্ট্যটি আপডেট করার কোড is


এটি মূলত কোনও সত্তার জন্য হওয়া উচিত।
কিংশুক দেব

হ্যাঁ এটি যে কোনও সত্তার পক্ষে কাজ করবে। এটি মূলত কল Magento\Eav\Model\Entity\AbstractEntity::saveAttribute()করবে যা কোনও ডেটাবোজেক্ট এবং সত্তা কোড গ্রহণ করবে।
জাইমিন সুতারিয়া

এটি উত্সাহ দেওয়া কিন্তু এখনই উত্তর হিসাবে গ্রহণ করা হচ্ছে না। আমি পরীক্ষা করে আপডেট করব।
কিংশুক দেব

দয়া করে ফাইলের 1608 লাইনে যান। (ম্যাজেন্টো ২.১.৫) এর আরও একটি ফাংশন রয়েছেpublic function saveAttribute(\Magento\Framework\DataObject $object, $attributeCode)
জাইমিন সুতারিয়া

1
মনে হয় ম্যাগেন্টো মূলত সমস্ত গুরুত্বপূর্ণ ফাংশন অক্ষত রেখেছে।
কিংশুক দেব

4

জাইমিনের উত্তরটি পরিষ্কার করতে:

এটি যে কোনও সত্তার পক্ষে কাজ করবে।

এটি সত্য নয়। এটি কেবল প্রসারিত EAV সত্তাগুলির জন্যই কাজ করবেMagento\Eav\Model\Entity\AbstractEntity

যদি আপনি এমন কোনও EAV সত্তার সাথে কাজ করছেন যেখানে সংস্থান উত্সটি প্রসারিত করে তবে Magento\Framework\Model\ResourceModel\Db\AbstractDbআপনার saveAttributeপদ্ধতিটি আপনার সংস্থান মডেলটিতে প্রয়োগ করতে হবে ।

ম্যাজেন্টো 2-তে, তারা Magento\Sales\Model\ResourceModel\Attributeক্লাসের জন্য এটি করেছে :

public function saveAttribute(AbstractModel $object, $attribute)
{
    if ($attribute instanceof AbstractAttribute) {
        $attributes = $attribute->getAttributeCode();
    } elseif (is_string($attribute)) {
        $attributes = [$attribute];
    } else {
        $attributes = $attribute;
    }
    if (is_array($attributes) && !empty($attributes)) {
        $this->getConnection()->beginTransaction();
        $data = array_intersect_key($object->getData(), array_flip($attributes));
        try {
            $this->_beforeSaveAttribute($object, $attributes);
            if ($object->getId() && !empty($data)) {
                $this->getConnection()->update(
                    $object->getResource()->getMainTable(),
                    $data,
                    [$object->getResource()->getIdFieldName() . '= ?' => (int)$object->getId()]
                );
                $object->addData($data);
            }
            $this->_afterSaveAttribute($object, $attributes);
            $this->getConnection()->commit();
        } catch (\Exception $e) {
            $this->getConnection()->rollBack();
            throw $e;
        }
    }
    return $this;
}

3

পণ্যের ক্ষেত্রে, আপনি ভর ক্রিয়া অবজেক্টটি ব্যবহার করতে পারেন। উদাহরণ স্বরূপ:

// Edit
$productIds = [123];
$attributesData = ['name' => 'new product name'];
$storeId = 0;
$productMassAction = \Magento\Framework\App\ObjectManager::getInstance()->get('Magento\Catalog\Model\Product\Action');
$productMassAction->updateAttributes($productIds, $attributesData, $storeId);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.