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 id, tentruyen,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!