Magento2 में पूरे उत्पाद को बचाने के बजाय केवल विशिष्ट विशेषता मान को कैसे बचाया जाए


10

जैसा कि आप लोग पहले से ही जानते हैं कि हम इस तरह के एक विशिष्ट विशेषता मान को बचाने के लिए Magento में इस विधि का उपयोग करते थे।

// 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

इसकी Magento 1 जैसी ही है

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

यह किसी भी इकाई के लिए काम करेगा।

@ राफेल के उत्तर के अनुसार यह बिक्री विशेषताओं के लिए काम नहीं करेगा।

मूल रूप से यह Magento \ Eav \ Model \ Entity \ AbstractEntity :: saveAttribute () फ़ंक्शन को कॉल करता है।

यह दो मापदंडों को स्वीकार करेगा

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

सबसे पहले $objectएक ऑब्जेक्ट है जिसे अपडेट करने की आवश्यकता है और दूसरा पैरामीटर वह होगा $attributeCodeजो अपडेट किए जाने वाले विशेषता के लिए कोड है।


यह मूल रूप से किसी भी इकाई के लिए होना चाहिए।
किंग्सुक देब

हाँ यह किसी भी इकाई के लिए काम करेगा। यह मूल रूप से कॉल Magento\Eav\Model\Entity\AbstractEntity::saveAttribute()करेगा जो डेटाबजेक्ट और एंटिटी कोड को स्वीकार करेगा।
जैमिन सुतारिया

इसे अपवोट करना लेकिन अभी उत्तर के रूप में स्वीकार नहीं करना। मैं जांच करूंगा और अपडेट करूंगा।
किंशुक देब

कृपया फ़ाइल में लाइन 1608 पर जाएं। (Magento 2.1.5) एक और कार्य हैpublic function saveAttribute(\Magento\Framework\DataObject $object, $attributeCode)
Jaimin Sutariya

1
लगता है कि Magento ने मूल रूप से सभी महत्वपूर्ण कार्यों को बरकरार रखा है।
किंशुक देब

4

सिर्फ जैमिन का जवाब स्पष्ट करने के लिए:

यह किसी भी इकाई के लिए काम करेगा।

यह सच नहीं है। यह केवल ईएवी संस्थाओं के लिए काम करेगा जो विस्तार करते हैंMagento\Eav\Model\Entity\AbstractEntity

यदि आप एक गैर ईएवी इकाई के साथ काम कर रहे हैं जहाँ संसाधन मॉडल का विस्तार होता है Magento\Framework\Model\ResourceModel\Db\AbstractDbतो आपको saveAttributeअपने संसाधन मॉडल में विधि को लागू करना होगा ।

Magento 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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.