ম্যাজেন্টো 2 - একাধিক মডেল / রিসোর্স মডেল অবজেক্টের ডাটাবেস লেনদেন?


11

আমার যদি এমন যুক্তি থাকে যা একাধিক মডেল অবজেক্টগুলিকে আপডেট করতে জড়িত যা ডেটাবেসে কয়েকটি টেবিল আপডেট করে, ডেটা অখণ্ডতা নিশ্চিত করতে একটি ডাটাবেস লেনদেন কীভাবে সরবরাহ করবেন?

উত্তর:


22

আপনি সম্ভবত একাধিক সংযুক্ত বস্তুর সামগ্রিক সঞ্চয় করছেন। এই বস্তুগুলির মধ্যে কোনটি মূল তা নির্ধারণ করুন , উদাহরণস্বরূপ:

               [order]              <------ this is the root
               /  |  \
billing_address   |   shipping_address
                  |
            order_items

মূলের রিসোর্স মডেলে আপডেট যুক্তি যুক্ত করুন এবং সেখানে লেনদেন ব্যবহার করুন।

কীভাবে লেনদেন ব্যবহার করবেন

  1. আপনি যদি একাধিক মডেলের উদাহরণগুলি সংরক্ষণ করতে চান তবে আপনি লেনদেনের মডেলটি ব্যবহার করতে পারেন। \Magento\Framework\DB\TransactionFactoryআপনার সংস্থান মডেলটিতে লেনদেনের কারখানাটি ইনজেক্ট করুন এবং এটির মতো ব্যবহার করুন:

    $saveTransaction = $this->transactionFactory->create();
    $saveTransaction->addObject($objectToSave);
    $saveTransaction->addObject($otherObjectToSave);
    ...
    $saveTransaction->save();

    প্রতিশ্রুতিবদ্ধ বা রোলব্যাক স্বয়ংক্রিয়ভাবে save()পদ্ধতি দ্বারা পরিচালিত হয় ।

  2. বিকল্পভাবে আপনি সরাসরি লেনদেনগুলি ব্যবহার করতে পারেন (আপনি যদি অন্য ডেটাবেস আপডেটগুলি ব্যবহার করেন তবে $model->save():

    $connection = $this->getConnection();
    $connection->beginTransaction();
    try {
        ...
        $connection->commit();
    } catch (\Exception $e) {
        $connection->rollBack();
        throw $e;
    }

সংগ্রহস্থলগুলি ব্যবহার করার সময় একাধিক অবজেক্টগুলি সংরক্ষণ করার কোনও সমর্থিত উপায় কী? তারা অভ্যন্তরীণভাবে save()সংস্থানসমূহের মডেলগুলির পদ্ধতিগুলিকে কল করে, তাই তাদের প্রত্যেককে পৃথক লেনদেনে সংরক্ষণ করা হবে। সংগ্রহস্থলগুলিতে প্রায়শই কিছু বৈধতা যুক্তি থাকে, সুতরাং সাধারণ প্লেইন রিসোর্স মডেল save()পদ্ধতির পরিবর্তে এগুলি ব্যবহার করার পরামর্শ দেওয়া হয় ।
বার্তোস্জ কুবিকি

1
@ বার্তোসকুবিকি আছে যদি দুটি রিসোর্স মডেল একই সংযোগটি ব্যবহার করে (তারা সাধারণত এটি করে তবে এটি ডিফল্ট একটি) প্রথম সংস্থানটির আফটারস্যাভ () পরে সম্পর্ক সংরক্ষণ করে একই লেনদেনে প্রশ্ন যুক্ত হতে পারে। আদেশগুলি কীভাবে সংরক্ষিত হয় সেদিকে নজর রাখুন। অর্ডারপোজিটরি :: সেভ () হল প্রবেশের পয়েন্ট।
ভিটোরিওডেফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.