Laravel การใช้งาน Database Migration เบื้องต้น

Laravel การใช้งาน Database Migration เบื้องต้น

Laravel การใช้งาน Database Migration เบื้องต้น

ใน framework laravel นั้นในส่วนของการเชื่อมต่อกับฐานข้อมูลนั้นจะมี feature Database Migration เพื่อเป็น script ในการสร้างฐานข้อมูลและกำหนดโครงการของ web application ที่เราสร้างขึ้น และยังสามารถ seeder ข้อมูลในส่วนของ master data เบื้องต้นได้อีกด้วย

ขั้นแรกเราก็ทำต่อจาก Project ก่อนหน้าที่ผ่านมา เริ่มต้นติดตั้ง Laravel PHP Framework ด้วย Composer โดยผมจะสร้าง Model ขึ้นมา 2 โมเดล โมเดลอันแรกมีชื่อว่า Topic โดยไฟล์ Model นั้นจะสร้างใน directory app\models

Laravel การใช้งาน Database Migration เบื้องต้น

โดย Model Topic มีโค้ดดังนี้

[sourcecode language=”php”]

hasMany(‘Postboard’);
}
}

[/sourcecode]

สังเกต method postboard จะเห็นว่าจะมีการฟังก์ชั่น hasMany ซึ่งจะเป็นการบอกว่า 1 Topic สามารถมี Postboard หรือการตอบโพสหลายๆๆอัน

ต่อมาก็จะเป็น Model Postboard ซึ่งมีโค้ดดังนี้

[sourcecode language=”php”]

belongsTo(‘Topic’);
}
}

[/sourcecode]

จะสังเกตเห็นว่า class Postboard นั้นจะมี method topic ซึ่งจะเรียกใช้ ฟังก์ชั่น belongsTo นั้นก็หมายความว่า Postboard จะเป็นส่วนหนึ่งของ Topic นั้นเองและ class ทั้ง 2 คือ Postboard และ Topic นั้นจะ extends มาจาก Eloquent  เพื่อให้ class ทั้ง 2 เชื่อมต่อกับ Database แบบ Eloquent ORM นั้นเอง

ต่อจากนั้นก็ใช้คำสั่ง artisan migrate เพื่อสร้าง Migration  ของ Database โดยมีคำสั่งดังนี้

php artisan migrate:make add_topic_post

โดย add_topic_post จะเป็นชื่อที่เราต้องการ หลังจากเราใช้คำสั่งก็จะได้ดังรูปครับ

Laravel การใช้งาน Database Migration เบื้องต้น

หลังจากนั้นเราจะได้ไฟล์ migrate มาอันหนึ่งสังเกตชื่อไฟล์ที่ artisan สร้างขึ้นมาให้ด้วยนะครับ

 Laravel การใช้งาน Database Migration เบื้องต้น

ซึ่งจะอยู่ใน directory app\database\migrations ต่อจากนั้นเราจะทำการเขียนไฟล์นี้ โดยจะมี function 2 function คือ up() กับ down() ซึ่งจะใช้ up() สำหรับการสร้างและ down() สำหรับการลบข้อมูล จากนั้นเราก็ทำการกำหนดโครงสร้าง table เพื่อเก็บข้อมูลของโมเดลทั้ง 2 ที่เราสร้างขึ้นในตอนแรก

โดยมีโค้ดดังนี้

[sourcecode language=”php”]

public function up()
{
Schema::create(‘postboard’,function($table){
$table->increments(‘id’);
$table->string(‘title’);
$table->string(‘detail’);
$table->integer(‘topic_id’)->nullable();
$table->timestamps();
});
Schema::create(‘topic’,function($table){
$table->increments(‘id’);
$table->string(‘name’);
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop(‘postboard’);
Schema::drop(‘topic’);
}

[/sourcecode]

จะสังเกตว่า function up นั้นเราจะทำการสร้าง table ขึ้นมา 2 table โดยมีโครงสร้างดังโค้ดคือ table postboard นั้นจะประกอบด้วย

id : int auto increment

title: string

detail: string

topic_id: int not null

timestamps : จะเป็นการกำหนดให้ทำการสร้าง column 2 อันเพื่อเก็บเวลาคือ created_at, updated_ad

ส่วน table topic นั้นจะมีโครงสร้างดังนี้

id: int auto increment

topic_name: string

ซึ่งก่อนเราจะทำการ migrate ข้อมูลนั้นเราต้องสร้าง database และกำหนดค่าการเชื่อมต่อใน config file ซะก่อน ซึ่งผมจะใช้ database mysql เราสามารถกำหนด config ได้จากไฟล์ database.php ใน directory app\config โดยทำการเปลี่ยนค่าการเชื่อมต่อในส่วนโค้ดนี้ครับ

[sourcecode language=”php”]

‘mysql’ => array(
‘driver’    => ‘mysql’,
‘host’      => ‘localhost’,
‘database’  => ‘forge’,
‘username’  => ‘forge’,
‘password’  => ”,
‘charset’   => ‘utf8’,
‘collation’ => ‘utf8_unicode_ci’,
‘prefix’    => ”,
),

[/sourcecode]

หลังจากเปลี่ยน username, password, database แล้วก็ host แล้วก็อย่าลืมตรวจสอบว่าเราได้ทำการสร้าง database ตามชื่อที่เรากำหนดไว้หรือไม่

หลังจากนั้นก็ให้ใช้คำสั่ง php artisan migrate เพื่อทำการ migrate ข้อมูลตาม schema ที่เรากำหนดไว้ ซึ่งจะได้ดังรูปครับ

Laravel การใช้งาน Database Migration เบื้องต้น

หลังจากใช้คำสั่ง migrate แล้วจะได้ table ที่เรากำหนด schema ไว้ในไฟล์ migrate

Untitled4

โครงสร้าง table postboard ที่ได้ หลังใช้คำสั่ง migrate

Untitled5

โครงสร้าง table topic ที่ได้ หลังใช้คำสั่ง migrate

 Laravel การใช้งาน Database Migration

ต่อจากนี้ก็จะเป็นการ seeder ข้อมูลให้กับ Database เพื่อเป็นข้อมูลเริ่มต้น โดยทำการสร้างไฟล์ขึ้นมาใหม่โดยมีชื่อว่า TopicTableSeeder.php โดยจะเซฟไว้ใน directory app\database\seeds โดยจะเป็น class ที่กำหนดข้อมูลในการ seeder ซึ่ง class TopicTableSeeder จะ extends class Seeder โดยมีโค้ดดังนี้

[sourcecode language=”php”]

insert(array(array(‘id’ => 1, ‘name’ => “General”),
array(‘id’ => 2 , ‘name’ => “Developer”),
array(‘id’ => 3, ‘name’ => “Android”)));
}
}

[/sourcecode]

ซึ่งจากโค้ดจะเป็นการกำหนดข้อมูลให้กับ table topic จำนวน 3 record ด้วยกัน ในกรณีที่เราต้องการ seeder ข้อมูลที่เป็น username password defautl เริ่มต้นนั้นเราสามารถใช้คำสั่ง
Hash::make(‘test’) ซึ่งคำว่า test จะเป็น password default นั้นเองแต่ใน database จะเก็บเป็น hash data ครับซึ่งการทำ seeder data
นั้นจะทำให้สามารถกำหนด table และข้อมูลเริ่มต้นให้ web application ได้ไม่ว่าจะเป็น master data หรือ default user ก่อนที่จะไปเปลี่ยนพาสเองภายหลัง
เรียกว่าจบขั้นตอนด้วย command line ไม่ต้องสลับไปมาระหว่างหน้าจอ command line กับ Database admin เลยครับ
หลังจากที่เรากำหนด class TopicTableSeeder เสร็จแล้วให้เราทำการเรียกการใช้งานโดยเพิ่มคำสั่ง
$this->call(‘TopicTableSeeder’); ใน class DatabaseSeeder ที่อยู่ใน directoryเดียวโดยเพิ่มโค้ดในส่วนของ function run()
[sourcecode language=”php”]
call(‘TopicTableSeeder’);
// $this->call(‘UserTableSeeder’);
}

}
[/sourcecode]

หลังจากเสร็จจากการเขียนโค้ดทั้ง 2 ไฟล์แล้วให้ทำการใช้คำสั้ง

php artisan db:seed จะได้ผลลัพธ์ดังรูปครับ

 Laravel การใช้งาน Database Migration เบื้องต้น

Untitled8

จะเห็นว่ามันทำการ insert ข้อมูลลงใน table ให้เองเลยเรียกว่าเป็นความสะดวกในการ migrate ข้อมูลเริ่มต้นจริงๆครับ ก็เป็นอันเสร็จสิ้นสำหรับบทความ การใช้งาน Database Migration เบื้องต้นของ Laravel แล้วนะครับโปรดติดตามบทความอื่นๆในครั้งหน้านะครับ

Leave a Reply

Your email address will not be published. Required fields are marked *