การแก้ไขปัญหา Migration Timestamp/ Datetime บน Laravel ให้เข้ากับ SQL SERVER

ในการพัฒนาระบบด้วย Laravel หากติดปัญหา error เกี่ยวกับ Date Time ที่เกิดปัญหาจาก Datetime บน SQL Server

ดัง error ที่แสดงต่อไปนี้

SQLSTATE[22007]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.

จากปัญหาดังกล่าวผู้พัฒนาระบบสามารถดำเนินการแก้ไขโดยใช้คำสั่ง php artisan make:migration update_timestamp_<ชื่อตาราง>_table –table=<ชื่อตาราง>

php artisan make:migration update_timestamp_<ชื่อตาราง>_table –table=<ชื่อตาราง>

และเมื่อใช้คำสั่งในข้างต้นจะสร้างไฟล์ Migration ใหม่ที่อยู่ในโฟลเดอร์ database/migrations โดยมีไฟล์พี่มีรูปแบบดังต่อไปนี้ YYYY_MM_DD_HHMMSS_update_timestamp_<ชื่อตาราง>_table.php

ในขั้นตอนต่อไปทำการเข้าไปแก้ไขไฟล์ที่ได้จากการ Migration โดยแก้ไขดังนี้

public function up(): void
{
Schema::table(‘<ชื่อตาราง>‘, function (Blueprint $table) {
DB::update(‘ALTER TABLE <ชื่อตาราง> ALTER COLUMN created_at DATETIME2(0)’);
DB::update(‘UPDATE <ชื่อตาราง> SET created_at = CURRENT_TIMESTAMP’);
DB::update(‘ALTER TABLE <ชื่อตาราง> ALTER COLUMN updated_at DATETIME2(0)’);
DB::update(‘UPDATE <ชื่อตาราง> SET updated_at = CURRENT_TIMESTAMP’);
});
}

เมื่อเข้าไปแก้ไขในไฟล์ที่ได้จากการ Migration สำเร็จแล้วทำการบันทึกและใช้คำสั่ง php artisan migrate

php artisan migrate

เมื่อทำตามขั้นตอนทั้งหมดจะสามารถแก้ปัญหา Migration Timestamp/ Datetime บน Laravel ให้เข้ากับ SQL SERVER ได้สำเร็จ

หมายเหตุ : การใช้คำสั่งต่างๆ ใน laraval อาจจะมีการเปลี่ยนแปลงขึ้นอยู่กับ version ของ laravel ที่ใช้พัฒนาระบบ โดยผู้เขียนใช้ Laravel Framework version 10.13.5 ในการแก้ไขปัญหา สามารถตรวจสอบ version โดยใช้คำสั่ง php artisan –version ของท่านได้

ผู้เขียน