Migration(laravel)

  • Mục đích để tránh việc mất thời gian khi phải export import DB mỗi lần chuyển sang máy người khác và dễ dàng đồng bộ DB giữa các thành viên trong team.
    Giúp việc chuyển đổi giữa các hệ CSDL mà không cần viết bất kỳ câu lệnh SQL nào
    Hiện laravel cung hỗ trợ 4 loại csdl MySQL (của Oracle, phiên bản khác là MariaDB do cộng đồng MySQL trước đây chuyển sang), Postgres, SQLite, SQL Server (của Microsoft) nếu muốn dùng cho hệ CSDL khác thì cần cài thêm thư viện.

Đê mirgration hoạt động trước tiên ta cầu cấu hình kết nối CSDL

1 / Cách tạo migration
php artisan make:migration create_users_table_name
Tên phảighi rõ mục đich chủa migration
vd : create_articles_table

2/
TH1:Running All migration
php artisan migrate
TH2: Run one file migration
php artisan migrate:refresh --path=/database/migrations/name_file.php
2022_11_23_093905_create_news_table.php

Khi migrate hệ sẽ sinh thêm 1 bảng mặc định migrations lưu trữ thông tin các bảng được tạo bởi mirgration.

Trong file mirgration mới được tạo ra mặc định có 2 fuction
up() //dùng để thực hiện các logic thêm, bớt, update ....DB
down()//dùng phục hồi hay xóa table

3/Rollback The Last Migration Operation
lệnh này sẽ roll back về phiên bản trước đó .
+ php artisan migrate:rollback
+php artisan migrate:rollback --step=3 //roll back về 3 lần trướcđó
vd : khi migrate ra 4 bảng rollback step =1 thì bảng thứ 4 sẽ không có chỉ có bảng 1,2,3

Rollback all migrations

  • php artisan migrate:reset // reset tất cả các mirgration đưa  cấu trúc CSDL về thời điểm chưa có migrate nào.

Khi muốn vừa rollback tất cả và đồng thơi migrate sau khi rollback thành công

  • php artisan migrate:refresh

4,Tạo khóa chính primarykey ->primary();
5, tạo khóa ngoại foreinkey
C1: Set khi tạo mới table :
$table->unsignedInteger('user_id')->references('id')->on('users');
C2: Set sau khi tạo mới table :
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

Muốn tạo bảng mới trong DB :
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
});

Muốn kiếm tra xem table hoặc column có tồn tại không .
if (Schema::hasTable('users')) {
//
}

if (Schema::hasColumn('users', 'email')) {
//
}

Đổi tên table.
Schema::rename('post', 'posts')

Xóa bảng .
Schema::drop('users');

Schema::dropIfExists('users'); //nếu tồn tại bảng thì xóa

-Set default value null hoặc notnull
$table->string('title', 10)->nullable();

Thiêt lập khóa ngoại :
php artisan  make:migration add_user_id_in_users_table --table=posts

  Schema::table('posts', function (Blueprint $table) {
      //tạo thêm 1 trưởng user_id sau column id của bảng post
  $table->unsignedInteger('user_id')
      ->after('id');

      $table->foreign('user_id')
      ->references('id')->on('users')
      ->onDelete('cascade');//nếu một bản ghi trong bảng mẹ bị xóa thì bản ghi tương 

//ứng trong bảng con cũng sẽ tự động xóa
});
ref:
các kiểu dữ liệu tương ứng DB :
https://laravel.com/docs/9.x/migrations#column-method-char

https://hoclaptrinh.vn/posts/migration-trong-laravel
https://allaravel.com/blog/laravel-migration-va-laravel-seeding-quan-ly-phien-ban-database