জাইমিনের উত্তরটি পরিষ্কার করতে:
এটি যে কোনও সত্তার পক্ষে কাজ করবে।
এটি সত্য নয়। এটি কেবল প্রসারিত 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;
}