Sửa bảng với Migration Laravel 8

Bài này chúng ta sẽ học các sửa bảng với Migration Laravel 8 cụ thể là cách thêm ,sửa các trường trong bảng với migration nhé.

Cách dùng Migration để sửa bảng (table) trong Laravel 8

Xét lại ví dụ trước chúng ta đã tạo được bảng news với các trường sau idtentruyen,tacgia,chap bây giờ chúng ta muốn chỉnh sửa bảng này thì làm thế nào. Các bạn hãy xem ví dụ dưới để biết cách nhé!

Chúng ta cần tạo một Migration mới dành riêng cho việc sửa đổi bảng như sau: tạo file Migration edit_news_table.php bằng lệnh

php artisan make:migration edit_news_table --table=news

Lúc này file Migration  2021_01_22_092354_edit_news_table.php đã được tạo bên trong thư mục /database/migrations/ với nội dung sau:

<?php


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


class EditNewsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('news', function (Blueprint $table) {
            //
        });
    }


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

Ta thấy nội dung tương tự như tạo file create_news_table.php, nhưng 2 function up() và down() đang là rỗng.

2.1 Thêm cột dữ liệu

Để thêm cột mới (VD như cột gioithieu) vào bảng news, ta điều chỉnh file edit_news_table.php vừa tạo như sau:

<?php


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


class EditNewsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('news', function (Blueprint $table) {
             $table->string('gioithieu');
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('news', function (Blueprint $table) {
            //
        });
    }
}


Chạy lại lệnh php artisan migrate

php artisan migrate

hiển thị kết quả sau đây là thành công:

Kiểm tra lại bảng news trên phpMyAdmin chúng ta thấy một cột mới gioithieu đã được thêm vào

2.2 Thay đổi cột dữ liệu

Để thay đổi được dữ liệu trên bảng ví dụ thay đổi tên cột, trước tiên ta cần phải cài thêm thư viện Doctrine/dbal vào Laravel, nếu chưa có thì các bạn chạy dòng lệnh sau tại thư mục project laravel

composer require doctrine/dbal

Giả sử bây giờ chúng ta cần thay đổi tên cột gioithieu thành mota, và cần thêm một cột mới là nguyetphieu, ta tiến hành thay đổi file edit_news_table.php như sau:

 public function up()
    {
        Schema::table('news', function (Blueprint $table) {
            $table->renameColumn('gioithieu', 'mota');
            $table->string('nguyetphieu');
        });
    }

Lúc này nếu bạn chạy

php artisan migrate 

thì sẽ nhận được thông báo "Nothing to migrate" lý do là là do bên trong table migrations đã tồn tại tên migration 

2021_01_22_092354_edit_news_table

Để giải quyết vấn đề này, ta cần xóa dữ liệu 2021_01_22_092354_edit_news_table này đi là được

sau đó chạy lại lệnh 

php artisan migration

Table news sẽ được cập nhật.

2.3 Xóa cột dữ liệu

Vào file edit_news_table.php sửa lại như sau

  public function up()
    {
        Schema::table('news', function (Blueprint $table) {
            $table->dropColumn('nguyetphieu');
        });
    }

Tương tự như trường hợp thay đổi cột, khi chạy lệnh php artisan migration nếu xuất hiện thông báo "Nothing to migrate."

do đó ta cũng xử lý tương tự như trên:

Lời kết:

Vậy là chúng ta đã biết cách sử dụng Migration 8 để sửa bảng (table) trong Laravel rồi đấy, đơn giản phải không nào. Chúc các bạn học tốt!

Bình luận