Bài 5: Quản lý bảng bằng Migrations – Học lập trình Laravel

Đăng bởi : Admin | Lượt xem : 3062 | Chuyên mục : Laravel

1. Giới thiệu

Migration giống như một mạng lưới hệ thống quản trị phiên bản giống như Git nhưng dành cho cơ sở tài liệu. Migration cho phép định nghĩa những bảng trong CSDL, định nghĩa nội dung những bảng cũng như update đổi khác những bảng đó trọn vẹn bằng PHP. Đồng thời những thao tác CSDL này còn hoàn toàn có thể sử dụng trên những loại CSDL khác nhau như MySQL, SQL Server, Postgres … mà không cần chỉnh sửa lại code theo CSDL sử dụng

Điều kiện tiên quyết để chạy migration một cách thành công:

  1. Phải có kết nối Database
  2. Migrations muốn sử dụng được thì phải nằm trong thư mục App\database\migrations

2. Tạo migration

Để tạo một migration tất cả chúng ta có 2 cách để tạo, một là tất cả chúng ta sẽ vào database / migrations tạo một file mới trong đó. Nhưng cách này thường mọi người không dùng nhiều lắm, mọi người hay dùng cách thao tác với command line .Để tạo một migration ta sẽ sử dụng câu lệnh make : migration File migration mới sẽ được đặt trong thư mục database / migrationsMỗi file migration được đặt tên gồm có timestamp để xác lập thứ tự migartion với nhau. Ví dụ để tạo mới một bảng posts mới trong CSDl ta sẽ sử dụng câu lệnh sau :

php artisan make:migration create_table_posts_table --create=posts

Khi ta nhấn enter thì ngay lập tức trong file sẽ được tạo trong thư mục database / migration và nội dung của file sẽ như sau :

Sau đó để tạo bảng trong CSDL thì tất cả chúng ta sẽ dùng câu lênh :

php artisan migrate

3. Rollback/Migrate trong một câu lệnh

Câu lệnh php artisan migrate : refresh sẽ tiên phong rollback lại hàng loạt migration của chương trình, và thực thi câu lệnh migrate. Tức là thực thi function down ( ) xong rồi thực thi function up ( ) trong file migration .Câu lệnh sẽ thực thi tái cấu trúc hàng loạt database :

php artisan migrate:refresh

Nếu muốn triển khai function down ( ) với số lượng batch muốn rollback thì ta dùng câu lệnh :

php artisan migrate:rollback -step=n

4. Schema

Bây giờ tất cả chúng ta sẽ khám phá kỹ hơn Schema facade thực thi như nào nhé. Trong file migration để dùng Schema thì tất cả chúng ta sẽ use Illuminate \ Support \ Facades \ Schema .

Nếu muốn tạo một bảng mới trong DB của mình thì chúng ta có thể sử dụng

Schema::create('users', function (Blueprint $table) {
    $table-&gtincrements('id');
});

Nếu những bạn muốn kiểm tra xem table hoặc column có sống sót hay không thì ta dùng

if (Schema::hasTable('users')) {
    //
}

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

Nếu muốn đổi tên bảng từ post sang posts thì ta dùng

Schema::rename('post', 'posts')

Khi tất cả chúng ta muốn xóa bảng thì hoàn toàn có thể sử dụng Schema :: drop ( )

Schema::drop('users');
Schema::dropIfExists('users');

5. Các kiểu column

Command Description
$table->bigIncrements(‘id’); Tăng ID (primary key) sư dụng như “UNSIGNED BIG INTEGER”.
$table->bigInteger(‘votes’); Tương đương với BIGINT.
$table->binary(‘data’); Tương đương với BLOB.
$table->boolean(‘confirmed’); Tương đương với BOOLEAN.
$table->char(‘name’, 4); Tương đương với CHAR với độ dài cho trước.
$table->date(‘created_at’); Tương đương với DATE.
$table->dateTime(‘created_at’); Tương đương với DATETIME.
$table->dateTimeTz(‘created_at’); Tương đương với DATETIME (with timezone).
$table->decimal(‘amount’, 5, 2); Tương đương với DECIMAL với độ chính sách và phần thập phân.
$table->double(‘column’, 15, 8); Tương đương với DOUBLE với độ chính xác, 15 chữ số và 8 ký tự tính sau dấu phảy.
$table->enum(‘choices’, [‘foo’, ‘bar’]); Tương đương với ENUM.
$table->increments(‘id’); Tăng ID (primary key) sử dụng như “UNSIGNED INTEGER”.
$table->integer(‘votes’); tương đương với INTEGER
$table->ipAddress(‘visitor’) tương đương với IP address
$table->json(‘options’) tương đương với JSON
$table->jsonb(‘options’) tương đương với JSONB
$table->longText(‘description’) tương đương với LONGTEXT
$table->macAddress(‘device’) tương đương với MAC address
$table->mediumInteger(‘numbers’) tương đương với MEDIUMINT
$table->mediumText(‘description’) tương đương với MEDIUMTEXT
$table->morphs(‘taggable’) thêm INTEGER taggable_id và STRING taggable_type
$table->nullableTimestamps() giống với timestamps(), ngoại trừ việc cho phép sử dụng NULLs
$table->rememberToken() thêm remember_token như VARCHAR(100) NULL
$table->smallInteger(‘votes’) tương đương với SMALLINT
$table->softDeletes() thêm deleted_at column để soft deletes
$table->string(’email’) tương đương với VARCHAR
$table->string(‘name’, 100) tương đương với VARCHAR có độ dài
$table->text(‘description’) tương đương với TEXT
$table->time(‘sunrise’) tương đương với TIME
$table->timeTz(‘sunrise’) tương đương với TIME (với timezone)
$table->tinyInteger(‘numbers’) tương đương với TINYINT
$table->timestamp(‘added_on’) tương đương với TIMESTAMP
$table->timestampTz(‘added_on’) tương đương với TIMESTAMP
$table->timestamps() thêm vào hai column created_at và updated_at
$table->uuid(‘id’) tương đương với UUID
$table->float(‘amount’, 8, 2); Tương đương với FLOAT, 8 chữ số and 2 chữ số tính sau dấu phẩy.

6. Column Modifier

Nhiều khi tất cả chúng ta hoàn toàn có thể muốn cột trong table có giá trị null hay not null, cho nên vì thế Laravel tương hỗ những modifierVí dụ như ta muốn để cột address trong table users được phép null

Schema::table('users', function ($table) {
    $table-&gtstring('address')-&gtnullable();
});

7. Modifying Columns

Các bạn hoàn toàn có thể mở terminal lên và cài thư viện doctrine để hoàn toàn có thể sử dụng những hàm hữu dụng trong nó. composer require doctrine / dbalChúng ta thường hay mắc phảỉ sau khi migrate bảng rồi lại sực nhớ ra mình lại không muốn đặt tên cột như vậy nữa. Để xử lý yếu tố đó, thư viện doctrine có hàm giải quyết và xử lý được .

Schema::table('users', function ($table) {
    $table-&gtrenameColumn('from', 'to');
});

Hay một yếu tố nữa đó chính là mình muốn số lượng giới hạn giá trị kiểu tài liệu của một cột

Schema::table('users', function ($table) {
    $table-&gtstring('name', 50)-&gtnullable()-&gtchange();
});

8. Foreign Key Constraints

Đôi khi tất cả chúng ta muốn tạo những rằng buộc cho những bảng, tất cả chúng ta hoàn toàn có thể sử dụng cú pháp sau để rằng buộc cho 2 bảng :

Schema::table('posts', function ($table) {
    $table-&gtinteger('user_id')-&gtunsigned();
    $table-&gtforeign('user_id')-&gtreferences('id')-&gton('users');
});

Chú ý nếu không migrate mà không chạy được thì các bạn có thể tách ra làm 2 file migration để chạy.

Để drop một foreign ta dùng : USD table -> dropForeign ( ‘ posts_user_id_foreign ‘ ) ;

Chúng ta nên để ý quy tắc đặt tên foreign __foreign

Bạn hoàn toàn có thể kích hoạt hay bỏ kích hoạt việc sử dụng foreign key constraint trong migration sử dụng hai hàm sau :

Schema::enableForeignKeyConstraints();
Schema::disableForeignKeyConstraints();