สร้างโดยใช้คำสั่ง make:migration
Artisan command:
1 |
php artisan make:migration create_departments_table |
ระบบจะสร้างไฟล์ xxxx_xx_xx_xxxxxx_create_departments_table.php เก็บใว้ในโฟลเดอร์ database/migrations
ข้อมูลในไฟล์ก็จะประมาณด้านล่างครับ ชื่อตารางควรมี s ต่อท้าย
ดูการตั้งชื่อตารางตามลิ้งค์นี้ https://www.itpapaya.com/set-class-and-table-name-eloquent-laravel/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateDepartmentsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('departments', function (Blueprint $table) { $table->id(); $table->timestamps(); //ฟิวด์ที่เพิ่มเข้ามาเพิ่มเติม $table->string('name',150); //Foreign Key Constraints $table->unsignedBigInteger('created_by'); $table->foreign('created_by')->references('id')->on('users'); //Foreign Key Constraints $table->unsignedBigInteger('modified_by'); $table->foreign('modified_by')->references('id')->on('users'); //Foreign Key Constraints $table->unsignedBigInteger('owner_id'); $table->foreign('owner_id')->references('id')->on('users'); //สำหรับเวลาลบข้อมูล ให้อัพเดทวันที่ลบ แทนที่จะลบออกจากฐานข้อมูลจริง $table->softDeletes('deleted_at', 0); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('departments'); } } |
เราสามารถสร้าง field หรือ column ได้ดูเพิ่มเติมตามลิ้งค์นี้ครับ https://laravel.com/docs/master/migrations#creating-columns
ฟิวด์หลักๆที่จำเป็นต้องมี
$table->id(); คือ ID
$table->timestamps(); ระบบจะสร้างฟิวด์ created_at,updated_at
$table->softDeletes(‘deleted_at’, 0); จะมีหรือไม่ก็ได้ ถ้ามีเอาใว้สำหรับเวลาลบข้อมูลให้อัพเดทวันที่ลบ แทนที่จะลบออกจากฐานข้อมูลจริง
ตัวอย่างการทำ Foreign Key หรือดูเพิ่มเติมจากลิ้งค์นี้ https://laravel.com/docs/master/migrations#foreign-key-constraints
1 2 |
$table->unsignedBigInteger('user_id'); $table->foreign('user_id')->references('id')->on('users'); |
1 |
php artisan migrate |
ย้อนกลับคำสั่ง Migration ล่าสุด เช่น เรารันคำสั่งสร้าง Table อะไรล่าสุด มันก็จะลบออกทั้งหมดเลย
1 |
php artisan migrate:rollback |
ย้อนกลับคำสั่ง Migration ทั้งหมด
1 |
php artisan migrate:reset |
ย้อนกลับคำสั่ง Migration ทั้งหมดและรัน Migration ใหม่
1 2 3 |
php artisan migrate:refresh php artisan migrate:refresh --seed |
คำสั่งลบตารางและสร้างใหม่และทำการรันเพื่อเขียนข้อมูลใหม่ เหมาะกับการล้างฐานข้อมูลเพื่อใช้งานระบบใหม่
1 |
php artisan migrate:fresh --seed |
รันคำสั่งด้านล่าง ดูเพิ่มเติม https://laravel.com/docs/master/seeding#writing-seeders
1 |
php artisan make:seeder UserSeeder |
ระบบจะสร้างไฟล์ database/seeds/UserSeeder.php จากนั้นเข้าไปเขียนคำสั่งดังนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php use Illuminate\Database\Seeder; class UserSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { //เขียนคำสั่งลบข้อมูลในตาราง users และทำการเพิ่มข้อมูลเข้าไปใหม่ DB::table('users')->delete(); DB::table('users')->insert([ 'email' => 'admin@localhost.com', 'password' => Hash::make('123456'), 'name' => 'Administrator', 'phone' => '', 'is_admin' => 1, 'language' => 'th', 'timezone' => 'Asia/Bangkok', 'created_at' => date('Y-m-d H:i:s') ]); // } } |
จากนั้นเข้าไปที่ไฟล์ database/seeds/DatabaseSeeder.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { //เขียนคำสั่งเพื่อรัน Class UserSeeder เพื่อทำการสร้างข้อมูล User $this->call(UserSeeder::class); } } |
รันคำสั่ง
1 |
composer dump-autoload |
จากนั้นรันคำสั่งเพื่อรัน DatabaseSeeder
1 |
php artisan db:seed |
หรือคำสั่งด้านล่างเพื่อรันเฉพาะ class UserSeeder
1 |
php artisan db:seed --class=UserSeeder |
ใช้คำสั่งด้านล่างนี้ คำสั่งลบตารางและสร้างใหม่และทำการรันเพื่อเขียนข้อมูลใหม่ เหมาะกับการล้างฐานข้อมูลเพื่อใช้งานระบบใหม่
1 |
php artisan migrate:fresh --seed |
ดูเพิ่มเติมตามลิ้งค์นี้ https://laravel.com/docs/master/eloquent#defining-models
โดยใช้คำสั่ง
1 |
php artisan make:model Flight |
หรือจะสร้าง Model พร้อมกับสร้าง database migration โดยต่อด้วย--migration
หรือ -m
1 2 3 |
php artisan make:model Flight --migration php artisan make:model Flight -m |
หากเราสร้าง Flight Model ระบบจะอ้างอิงไปที่ตาราง flights
1 2 3 4 5 6 7 8 9 10 |
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model { // } |
หรือหากจะ อ้างอิงชื่อตารางเอง ก็ให้ใช้โค๊ดตามตัวอย่างด้านล่าง
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model { /** * The table associated with the model. * * @var string */ protected $table = 'my_flights'; } |
Attribute ที่ควรรู้
protected $table = ‘my_flights’; | ระบุตารางเอง |
protected $primaryKey = ‘flight_id’; | ระบุ Primary Key เอง |
protected $fillable = [‘name’]; | กำหนดให้สามารถกำหนดค่าได้ เช่น กำหนดค่าเพื่อส่งไปอัพเดท,หรือสร้างข้อมูลได้ เป็นต้น |
protected $guarded = [‘price’]; | ตรงข้ามกับ $fillable *ควรเลือกใช้อย่างใดอย่างนึงระหว่าง $guarded หรือ $fillable |
protected $attributes = [ ‘delayed’ => false, ]; |
กำหนดค่าเริ่มต้นของ Attributes |
การกำหนดความสัมพันของตารางเพื่อใช้ในการ Query ข้อมูลแบบ Eloquent ORM
อ่านเพิ่มเติม
https://stackoverflow.com/questions/53315965/laravel-user-and-role-relationship-user-has-only-1-role
ป้ายกำกับ:laravel, Migrations, model, Seeding