TÌM HIỂU VỀ MIGRATION TRONG LARAVEL

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

Trong bài viết này, Hybrid Technologies sẽ giới thiệu đến các bạn các sử dụng Migration trong Lavarel, cùng đọc và trải nghiệm nhé!

Thử tạo một Migration 

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

  • Phải có kết nối với database
  • Migration muốn sử dụng được phải nằm trong thư mục App\database\migrations

Để tạo một migration chúng ta có 2 cách, một là vào database/migrations tạo một file mới trong đó. Nhưng cách này thường không được sử dụng nhiều mà 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/migrations

Mỗi file migration được đặt tên bao gồm timestamp để xác định 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.

Sau đó để tạo bảng trong CSDL thì chúng ta sẽ dùng câu lênh: php artisan migrate
Bây giờ một vấn đề phát sinh la khi chúng ta nhanh tay migrate mà sực nhớ ra là chúng ta thiếu trường status của bảng posts . Đừng lo , chúng ta chỉ cần tạo một file migration mới với tham số trong command là –table=posts. Lệnh sẽ là :
php artisan make:migration add_attribute_status_into_posts_table –table=posts

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

Câu lệnh php artisan migrate:refresh sẽ đầu tiên rollback lại toàn bộ migration của chương trình, và thực hiện câu lệnh migrate. Tức là thực hiện function down() xong rồi thực hiện function up() trong file migration.
Câu lệnh sẽ thực hiện tái cấu trúc toàn bộ database:
php artisan migrate:refresh
php artisan migrate:refresh –seed
Tham số –seed là để chạy tất cả các Seeder chúng ta sẽ tìm hiểu trong bài sau .
Nếu muốn thực hiện 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

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->float(‘amount’, 8, 2); Tương đương với FLOAT, 8 chữ số and 2 chữ số tính sau dấu phẩy.
$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


Column Modifier

Nhiều khi chúng ta có thể muốn cột trong table có giá trị null hay not null, vì thế Laravel hỗ trợ các modifier và rất nhiều modifier nữa các bạn có thể tham khảo tại bảng dưới đây:

Modifier Description
after(‘column’) Đặt column “after” một column khác (MySQL Only)
comment(‘my comment’) Thêm một comment cho column
default($value) Đặt giá trị “mặc định” vào column
first() Đặt column “first” vào trong bảng (MySQL Only)
nullable() Cho phép dữ liệu kiểu NULL có thể chèn vào column
storedAs($expression) Tạo một cột stored (MySQL Only)
unsigned() Đặt cột integer sang UNSIGNED
virtualAs($expression) Tạo một cột virtual (MySQL Only)


Modifying Columns

Các bạn có thể mở terminal lên và cài thư viện doctrine để có thể sử dụng các hàm hữu ích trong nó.composer require doctrine/dbal
Chú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ư thế nữa. Để giải quyết vấn đề đó , thư viện doctrine có hàm xử lý được.

Tham khảo: https://laravel.com/docs/5.6/migrations

Facebook Comments
Đánh giá bài viết

Bạn thích bài viết này chứ?
Đăng ký để nhận những bài viết thú vị như thế hàng tuần.

Đừng sợ thất bại, chỉ sợ việc dậm chân tại chỗ

TÌM VIỆC
Bình luận