Migration laravel 8

Migration laravel 8 là công cụ cho phép tạo các bảng, các cột của bảng trong cơ sở dữ liệu bằng dòng lệnh PHP. Ngoài ra Migration còn có khả năng cập nhật các cột (đổi tên, xóa cột), nội dung các bảng đã tồn tại. Thay vì phải sửa đổi bảng bằng thủ công thì  bạn chỉ cần thực hiện bằng dòng lệnh đơn giản.  Điểm tốt của Migration trong Laravel là làm việc được với nhiều cơ sở dữ liệu như: MySQL, SQL Server, PostgresSQL, ... 

Tạo dữ liệu với Migration

  • Migration cần được đặt bên trong thư mục /database/migrations/.
  • Để Migration hoạt động, chúng ta cần kết nối với cơ sở dữ liệu, nếu bạn chưa biết cách kết nối thì bạn xem phần Kết nối database.

Thao tác với Migration, trước tiên bạn hãy mở cửa sổ lệnh cmd, di chuyển tới thư mục chứa project laravel 8 của bạn bằng lệnh:

VD: 
cd C:\xampp\htdocs\Jetstream\
Tạo Migration bằng lệnh Artisan:
php artisan make:migration create_news_table
  • php artisan - Công cụ hỗ trợ viết command line tích hợp sẵn trong Laravel, sẽ còn gặp lại nhiều.
  • make:migration - Lệnh tạo Migration.
  • create_news_table - Tên Migration do bạn tự đặt.
Dòng lệnh trên thực thi sẽ cho ta kết quả sau:

Sau khi thực thi lệnh, chúng ta sẽ nhận được thông báo file Migration đã được tạo  Created Migration: 2021_01_22_084823_create_news_table 

File Migration vừa tạo sẽ được lưu tại thư mục /database/migrations/, có nội dung như sau:

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateNewsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('news', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }


    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('news');
    }
}

Trong đó

  • use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; là các khai báo sử dụng cần cho thao tác Migration.
  • Chúng ta cần quan tâm là 2 function up()down():
    • public function up() dùng để thêm, bớt, thay đổi, ... nội dung bảng cơ sở dữ liệu - để thực thi ta cần sử dụng lệnh php artisan migrate
    • public function down() dùng phục hồi hay xóa bảng, ... - để thực thi ta cần sử dụng lệnh php artisan migrate:rollback

Với nội dung trên, ta đã có thể tạo bảng news với 1 cột là id, để có thể nhiều cột hơn ta thêm trực tiếp vào bên trong function up():

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateNewsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('news', function (Blueprint $table) {
            $table->increments('id');
            $table->string('tentruyen');
            $table->string('tacgia');
            $table->string('chap');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('news');
    }
}

Nếu kiểm tra trong phpMyAdmin ngay lúc này thì bạn sẽ thấy tab news chưa tạo.

Để cập nhật thông tin vào Database thì ta cần thực thi lệnh 

php artisan migrate

Khi chạy lệnh trên, nếu kết quả xuất hiện thông báo sau là thành công:

Kiểm tra database chúng ta sẽ thấy được bảng news

Bên cạnh bảng news chúng ta sẽ có bảng migrations

migrations: chứa dữ liệu của Migration, lưu trữ thông tin các bảng dữ liệu được tạo trong Migration.

Bảng news sẽ rỗng do chúng ta vừa tạo

Xử lý lỗi khi chạy lệnh Migration

Nếu gặp lỗi sau khi chạy lệnh php artisan migrate  bị lỗi nguyên nhân có thể có thể đã tồn tại bảng dữ liệu trong database trùng tên, xem xét và xóa bảng đó đi và chạy lại lệnh.

Lời kết

Trên đây là cách sử dụng Migration trong Laravel 8 để tạo bảng dữ liệu trong database. Có gì thắc mắc các bạn coment ở dưới nhé. Cảm ơn ccacs bạn đã theo dõi.


Bình luận