সঠিকভাবে লেনদেন ব্যবহার করা

webman-এ ডাটাবেস লেনদেন ব্যবহার অন্যান্য ফ্রেমওয়ার্কের মতোই, এখানে কিছু বিষয় উল্লেখ করা হয়েছে যা লক্ষ্য করা প্রয়োজন।

কোড কাঠামো

কোড কাঠামো অন্যান্য ফ্রেমওয়ার্কের মতোই, যেমন Laravel ব্যবহারের মতো (think-orm-এর সাথে সাদৃশ্য)

Db::beginTransaction();
try {
    // ..ব্যবসায়িক প্রক্রিয়া সংক্ষেপে...

    Db::commit();
} catch (\Throwable $exception) {
    Db::rollBack();
}

এখানে বিশেষভাবে লক্ষ্য করা প্রয়োজন যে অবশ্যই ব্যবহার করতে হবে \Throwable এবং ব্যবহার করতে হবে না \Exception কারণ ব্যবসায়িক প্রক্রিয়ার সময় সম্ভবত Error উত্থাপিত হতে পারে, যা Exception এর অন্তর্ভুক্ত নয়।

ডাটাবেস সংযোগ

যখন লেনদেনে মডেল পরিচালনা করা হয়, তখন বিশেষভাবে লক্ষ্য করা প্রয়োজন যে মডেলটি সংযোগ সেট করেছে কিনা। যদি মডেলটি একটি সংযোগ সেট করে থাকে তবে লেনদেন শুরু করার সময় সেই সংযোগটি নির্দিষ্ট করতে হবে, অন্যথায় লেনদেন কাজ করবে না (think-orm এর সাথে সাদৃশ্য)। উদাহরণস্বরূপ

<?php

namespace app\model;
use support\Model;

class User extends Model
{

    // এখানে মডেলটিকে সংযোগ নির্দিষ্ট করা হয়েছে
    protected $connection = 'mysql';

    protected $table = 'users';

    protected $primaryKey = 'id';

}

যখন মডেলটি একটি সংযোগ নির্দিষ্ট করে, তখন লেনদেন শুরু, লেনদেন সম্পন্ন এবং লেনদেন রোলব্যাক করার জন্য সেই সংযোগটি নির্দিষ্ট করা আবশ্যক।

Db::connection('mysql')->beginTransaction();
try {
    // ব্যবসায়িক প্রক্রিয়া
    $user = new User;
    $user->name = 'webman';
    $user->save();
    Db::connection('mysql')->commit();
} catch (\Throwable $exception) {
    Db::connection('mysql')->rollBack();
}

জমা না দেওয়া লেনদেনের অনুরোধ খোঁজা

কখনও কখনও ব্যবসায়িক কোডের বাগের কারণে কোনও একটি অনুরোধের লেনদেন জমা হয়নি, কোন নিয়ন্ত্রক পদ্ধতিতে লেনদেন জমা হয়নি তা দ্রুত নির্ণয়ের জন্য, webman/log উপাদানটি ইনস্টল করতে পারেন, এই উপাদানটি অনুরোধ শেষ হওয়ার পরে স্বয়ংক্রিয়ভাবে পরীক্ষা করবে যে কোন অজমা জমা দেওয়া হয়নি এবং লগ রেকর্ড করবে, লগের কীওয়ার্ড হল Uncommitted transactions

webman/log ইনস্টলেশন পদ্ধতি

composer require webman/log

দ্রষ্টব্য
ইনস্টল করার পর পুনরায় চালু করতে হবে, রোলডক্স কার্যকর নয়।