আমাদের প্রথমে দেখতে দিন, আপনি যদি save()
কোনও product
মডেলটিতে সরাসরি পদ্ধতিটি ব্যবহার করেন তবে কী হয়
/**
* @var Magento\Catalog\Model\Product $product
*/
$product->save();
মডেল ক্লাস নিজেই
Magento\Catalog\Model\Product
এই শ্রেণীর মধ্যে, সংরক্ষণ () পদ্ধতির সংজ্ঞাটি অনুসন্ধান করুন।
কিছুই ঠিক পাওয়া যায় নি? ঠিক আছে, সেভের আগে () এবং আফটার সেভ () আছে, তবে নিজেই সংরক্ষণ করুন না। আকর্ষণীয়, না?
তারপরে, আমাদের পিতামাতার ক্লাসগুলির দিকে নজর দেওয়া দরকার Magento\Catalog\Model\Product
।
আমাদের শেষ পর্যন্ত পৌঁছাতে হবে Magento\Catalog\Model\AbstractModel
এবং এর মধ্য দিয়ে যেতে হবে ।Magento\Framework\Model\AbstractExtensibleModel
Magento\Framework\Model\AbstractModel
নিশ্চিতভাবেই, এখানে একটি সংরক্ষণ () পদ্ধতি রয়েছে এবং এটি দেখতে দেখতে কিছুটা অসাধারণ
public function save()
{
$this->_getResource()->save($this);
return $this;
}
আমরা এখন দেখতে পাচ্ছি, যখনই যেকোন মডেলে সেভ () কে ডাকা হয়, এ থেকে সেভ () পদ্ধতিটি কল করা AbstractModel
হয় এবং বাস্তবায়ন হ'ল রিসোর্স মডেল আসলে সংরক্ষণ করে।
এই সর্বশেষটি অবাক করে দেওয়ার মতো নয় যে আমরা সর্বদা আছি, যেহেতু ম্যাজেন্টো 1.0 তে সময়ের সূচনা থেকে শুরু করে, কেবল কোনও সত্তার জন্য একটি মডেল এবং রিসোর্স মডেল উভয়ই তৈরি করে।
এখন, কীভাবে ProductRepository
কাজ করে তা একবার দেখে নেওয়া যাক ।
ফাইল খুলতে দেয়
/vendor/magento/module-catalog/Api/ProductRepositoryInterface.php
এই ইন্টারফেসটি দাবি করে যে অন্যান্য পদ্ধতির মধ্যেও একটি সংরক্ষণ () পদ্ধতি রয়েছে।
কে আসলে এই ইন্টারফেস বাস্তবায়ন করছে?
ফাইল খুলতে দেয়
/etc/di.xml
এবং চেক লাইন 10
<preference for="Magento\Catalog\Api\ProductRepositoryInterface" type="Magento\Catalog\Model\ProductRepository" />
সুতরাং, স্বাভাবিকভাবেই আমরা সেভ () মেন্টহোডের অভ্যন্তরটি খুঁজে পেয়েছি
/vendor/magento/module-catalog/Model/ProductRepository
এবং এটি 444 লাইন থেকে শুরু হচ্ছে, দেখতে কিছু মত
public function save(\Magento\Catalog\Api\Data\ProductInterface $product, $saveOptions = false)
{
$tierPrices = $product->getData('tier_price');
try {
.... other code here ....
এই পদ্ধতিটি প্রত্যাশা করে যে কোনও ধরণের object পণ্য অবজেক্ট প্রকারটি \Magento\Catalog\Api\Data\ProductInterface
কেটে গেছে, কিন্তু ডিফল্টরূপে এটি পুনরায় সমাধান হয় Magento\Catalog\Model\Product
।
নীচে 500 লাইনে নীচে তাকানো, একটি try
বিবৃতি winthin , আমরা এরকম কিছু দেখতে
$this->resourceModel->save($product);
আপনি ভাল অনুমান! $this->resourceModel
type 77 লাইনে সম্পত্তি \Magento\Catalog\Model\ResourceModel\Product
হিসাবে ঘোষিত হয় declaredprotected
সুতরাং, আবার, ResourceModel
আসলে সংরক্ষণ করে।
তবে, ৪৪৪ থেকে ৫০০ লাইনের মধ্যেই আপনার প্রশ্নের উত্তর। এখানে কার্যকর করা সমস্ত কোড, প্রকৃতপক্ষে, অবশেষে সরাসরি মডেল সংরক্ষণ এবং সংরক্ষণের এই সংগ্রহস্থলের মধ্যে আচরণের পার্থক্যের কারণ হতে পারে।
উদাহরণস্বরূপ, পণ্য সংগ্রহস্থলটি যদি ignore_links_flag
সেট করা থাকে তবে পণ্য লিঙ্কগুলি প্রসেস করবে 0
এবং এটি প্রথম স্থানে বিদ্যমান পণ্য কিনা তা পরীক্ষা করে দেখুন etc.
আমাদের সম্ভবত উপসংহারে আসা দরকার যে ভবিষ্যতে যদি পণ্যটি কীভাবে সংরক্ষণ করা হয় তার পরিবর্তন করার প্রয়োজন হয় তবে এটি করার আরও ভাল উপায় হ'ল পণ্য মডেলের পরিবর্তে পণ্য সংগ্রহস্থলকে ওভাররাইড করে।
পণ্য সংরক্ষণ এবং আপডেট করার ক্ষেত্রে এটি একই রকম। আমি বরং পণ্য সংগ্রহস্থল অবজেক্টটি ব্যবহার করব।
আমি আপনাকে বিনীতভাবে / ভেন্ডর / মেমেন্টো / মডুল- সিএমএস / মডেল / পেজরেপোজিটরি.পিএফ-কে উল্লেখ করি
এভাবেই কোনও সিএমএস পৃষ্ঠা সংরক্ষণাগারের মাধ্যমে সংরক্ষণ করা হবে। এখানে বিষয়গুলি সহজ। স্টোর আইডি সেট করা আছে এবং এখনই সংরক্ষণের জন্য রিসোর্স মডেলকে ডাকা হবে।
এই শেষ নোটিশের সাথে, আপনি এই সিদ্ধান্তে পৌঁছে যাবেন যে কোনও কোনও ক্ষেত্রে, সংগ্রহস্থল এবং মডেল সেভের মধ্যে এতটা পার্থক্য নাও হতে পারে তবে যাইহোক আমি আশা করি যে আপনি যখনই এটি করার দরকার হবে তখন সেগুলি সজ্জিত করার জন্য আপনি এখন সজ্জিত হয়েছেন।