การทำ Transaction ใน Yii Framework 2

wave
มานพ กองอุ่น 10 เม.ย. 2016 00:30:38 12,636

ทำไมต้องทำ Transaction?

เรื่องของ Transaction นั้นเป็นเรื่องที่มีมาค่อนข้างนานพอสมควร ข้อดีของการทำ Transaction คือ ในกรณีที่มีการทำงานกับคำสั่งในการประมวลผลฐานข้อมูลหลายๆ คำสั่ง ซึ่งอาจมีบางคำสั่งที่ไม่สามารถทำงานได้ หากเราเขียนโปรแกรมแบบเดิมก็จะมีการกระทำการกับคำสั่งมาเรื่อยๆ จนเกิด error ในคำสั่งที่ไม่สามารถทำงานได้ ตายละ เมื่อเกิด error แล้วตัวที่เราได้ทำไปแล้วจะย้อนกลับได้ หากต้องการย้อนกลับก็ต้องเขียนโปรแกรมตรวจสอบกันวุ่นวายเลยทีเดียว

ทางแก้ไขของเหตุการณ์เช่นนี้คือการทำ Transaction เพื่อตรวจสอบว่าคำสั่งทุกคำสั่งจะถูกทำงานได้อย่างปลอดภัย หากมีคำสั่งไหนที่ไม่สามารถทำงานได้หรือเกิด error บางอย่าง ก็จะ rollBack() กลับไปยังจุดเริ่มต้น ทำให้ระบบมีความปลอดภัย และมีความถูกต้องของข้อมูลมากยิ่งขึ้น

รูปแบบใน Yii Framework 2

คำสั่งของ Transaction ใน Yii Framework 2 นั้นสามารถทำได้อย่างง่ายดาย โดยมี try{}catch(){} เข้ามาช่วยดังนี้

if($model->load(Yii::$app->request->post() && $model2->load(Yii::$app->request->post())
{
    $transaction = Yii::$app->db->beginTransaction();
    try {
        $connection->createCommand($sql1)->execute();
        $connection->createCommand($sql2)->execute();
        //.... other SQL executions
        $model->save();
        $model2->model_id = $model->id;
        $model2->save();
        $transaction->commit();
        return $this->redirect(['index']);
    } catch (\Exception $e) {
        $transaction->rollBack();
        throw $e;
    }
}

สามารถดูรายละเอียดเพิ่มเติมได้ที่ 

http://www.yiiframework.com/doc-2.0/yii-db-transaction.html

สรุป

Transaction ช่วยให้เราสามารถพัฒนา Web Application ให้มีความเป็นมืออาชีพมากยิ่งขึ้นและที่สำคัญทำให้ความถูกต้องของข้อมูลมีมากขึ้นอีกด้วย


ความคิดเห็น

หากบทเรียนรู้มีความผิดพลาดประการใด หรือมีข้อเสนอแนะกรุณาแจ้ง contact@programmerthailand.com

เขียนบทเรียนรู้ของคุณ

รายละเอียด
  • ดู 12,636
  • รักเลย 0
  • หมวดหมู่ Yii Framework 2 (Yii2)
  • เขียนเมื่อ
  • แก้ไขเมื่อ
  • Tags yii transaction
ข้อมูลผู้เขียน
มานพ กองอุ่น

มานพ กองอุ่น

เป็นสมาชิกเมื่อ: 18 ธ.ค. 2009

เนื้อหาที่เกี่ยวข้อง