উত্তর:
আপনি সম্ভবত একাধিক সংযুক্ত বস্তুর সামগ্রিক সঞ্চয় করছেন। এই বস্তুগুলির মধ্যে কোনটি মূল তা নির্ধারণ করুন , উদাহরণস্বরূপ:
[order] <------ this is the root
/ | \
billing_address | shipping_address
|
order_items
মূলের রিসোর্স মডেলে আপডেট যুক্তি যুক্ত করুন এবং সেখানে লেনদেন ব্যবহার করুন।
আপনি যদি একাধিক মডেলের উদাহরণগুলি সংরক্ষণ করতে চান তবে আপনি লেনদেনের মডেলটি ব্যবহার করতে পারেন। \Magento\Framework\DB\TransactionFactory
আপনার সংস্থান মডেলটিতে লেনদেনের কারখানাটি ইনজেক্ট করুন এবং এটির মতো ব্যবহার করুন:
$saveTransaction = $this->transactionFactory->create();
$saveTransaction->addObject($objectToSave);
$saveTransaction->addObject($otherObjectToSave);
...
$saveTransaction->save();
প্রতিশ্রুতিবদ্ধ বা রোলব্যাক স্বয়ংক্রিয়ভাবে save()
পদ্ধতি দ্বারা পরিচালিত হয় ।
বিকল্পভাবে আপনি সরাসরি লেনদেনগুলি ব্যবহার করতে পারেন (আপনি যদি অন্য ডেটাবেস আপডেটগুলি ব্যবহার করেন তবে $model->save()
:
$connection = $this->getConnection();
$connection->beginTransaction();
try {
...
$connection->commit();
} catch (\Exception $e) {
$connection->rollBack();
throw $e;
}
save()
সংস্থানসমূহের মডেলগুলির পদ্ধতিগুলিকে কল করে, তাই তাদের প্রত্যেককে পৃথক লেনদেনে সংরক্ষণ করা হবে। সংগ্রহস্থলগুলিতে প্রায়শই কিছু বৈধতা যুক্তি থাকে, সুতরাং সাধারণ প্লেইন রিসোর্স মডেলsave()
পদ্ধতির পরিবর্তে এগুলি ব্যবহার করার পরামর্শ দেওয়া হয় ।