การใช้ธุรกรรมอย่างถูกต้อง
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
หมายเหตุ
หลังจากติดตั้งต้องทำการ restart ใหม่ เพื่อให้มีผล ข้อมูลที่ reload จะไม่มีผล