Migration cho phép các nhà phát triển (Developer) nhanh chóng tạo ra cở sở dữ liệu của ứng dụng mà không cần vào màn hình quản lý cơ sở dữ liệu hay chạy bất kì một câu lệnh SQL nào.

Trước hết, nếu bạn muốn xây dựng dự án, Bạn cần thiết kế cơ sở dữ liệu. Vậy bạn cần làm gì, bạn có thể thiết kế trực tiếp ở màn hình quản lý cơ sở dữ liệu và chẳng may bạn bỏ lỡ field/column hoặc datatype và cần phải sửa nó trực tiếp vào cơ sở dữ liệu. Đây là một thực tế thật sự không tốt chút nào trong Laravel.

Trong một tình huống khác, nếu một người trong dự án cần cơ sở dữ liệu của bạn, thì bạn cần phải gửi file SQL, nghe đến đây thôi mà mình đã cảm thấy đau đớn rồi, bạn nghĩ sao về trường hợp này.

Bây giờ bạn hãy nghỉ về một tương lai tương sáng hơn, đó chính là bạn chỉ cần pull source code về máy bạn, và chạy command line thì cơ sở dữ liệu tự động được cài đặt. Nếu làm được như vậy thì có phải nó rất hữu ích hay sao.

Laravel migration sẽ giúp bạn làm được điều đó. Bây giờ, bạn không cần phải lo lắng về file SQL hoặc bạn có thể bỏ sót field/column hoặc datatype nữa và bạn cũng không cần làm việc trước tiếp với cơ sở dữ liệu nữa. Bạn chỉ cần sửa đổi mã và chạy lệnh sau:

php artisan migrate:refresh

Vì vậy, tôi hy vọng bạn đã nhận thấy lợi của Laravel migation.

Bây giờ, chúng ta hãy thử làm ví dụ để trải nghiệm nào.

Trước tiên, bạn hãy thử tạo migrate cho bảng users

php artisan make:migration create_users_table

Khi đó, bạn hãy tạo cấu trúc migrate như bên dưới

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

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

Nhưng sau khi triển khai dự án, bạn cần thêm cột phone_number vào bảng users, nhiều bạn có suy nghĩ sửa trực tiếp file migrate users, nhưng do dự án đã triển khai rồi, nên mình khuyên các bạn không nên làm như vậy, mà hay tạo ra một file migrate khác có nhiệm vụ thêm cột phone_number vào bảng users.

Bây giờ, bạn hãy sử dụng lệnh sau:

php artisan make:migration add_phone_number_to_users_table

Sau đó, bạn hãy sửa đổi migrate mới tạo với cấu trúc như sau

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddPhoneNumberToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('phone_number')->unique()->after('email');
        });
    }

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

Khi đó, bạn chỉ cần sử dụng migrate rollback, nó sẽ hoạt động bình thường

php artisan migrate:rollback

Bây giờ bạn chỉ cần chạy lệnh

php artisan migrate

Tôi hy vọng bạn thích hướng dẫn này. Nếu bạn có bất kỳ câu hỏi nào hãy liên hệ với chúng tôi qua trang contact. Cảm ơn bạn.

CÓ THỂ BẠN QUAN TÂM

Simplify Your Laravel Workflow with Laravel Pint

Simplify Your Laravel Workflow with Laravel Pint

Laravel Pint là gì? Laravel Pint là một công cụ sửa đổi mã nguồn của bạn để mã nguồn của bạn tuân thủ theo các tiêu chuẩn. Nói một cách khác, Laravel Pint sẽ quét toàn bộ mã nguồn của bạn, phát...

Integrating CKFinder into CKEditor 5 in Laravel 11

Integrating CKFinder into CKEditor 5 in Laravel 11

CKEditor 5 CKEditor 5 là một trình soạn thảo văn bản phong phú JavaScript với nhiều tính năng và khả năng tùy chỉnh. CKEditor 5 có kiến trúc MVC hiện đại, mô hình dữ liệu tùy chỉnh và DOM ảo, mang...

Laravel Many to Many Eloquent Relationship

Laravel Many to Many Eloquent Relationship

Many To many Relationship là mối quan hệ hơi phức tạp hơn mối quan hệ 1 - 1 và 1- n. Ví dụ một user có thể có nhiều role khác nhau, trong đó role cũng được liên kết với nhiều user khác nhau. Vì vậy...

Laravel Logging Of Database Queries

Laravel Logging Of Database Queries

Laravel là một Framework PHP mạnh mẽ và linh hoạt, giúp cho việc phát triển ứng dụng trở nên đơn giản và dễ dàng hơn. Một trong những tính năng hữu ích của Laravel là khả năng ghi nhật ký truy vấn...

Laravel UI Custom Email Verification Template

Laravel UI Custom Email Verification Template

Nếu bạn đang dùng thư viện laravel/ui để làm các chức năng liên quan đến authentication, và trong dự án của bạn, bạn cần thay đổi template email verification thay vì sử dụng template email verificatio...

Amazon S3 Pre-Signed URL with DropzoneJs in Laravel

Amazon S3 Pre-Signed URL with DropzoneJs in Laravel

Chức năng upload file hay hình ảnh là một chức năng rất phổ biến, hầu hết các dự án đều có chức năng này. Đa số các nhà phát triển khi thực hiện chức năng upload file, thường sẽ sử dụng cách làm nh...

Laravel Factories, Seeder

Laravel Factories, Seeder

Trong bài viết này, tôi sẽ hướng dẫn các bạn về cách tạo dữ liệu giả trong cơ sở dữ liệu bằng cách sử dụng Laravel Factory và Seed trong Database Seeder. Để tạo model factory, bạn cần chạy lệnh sau...

Csv import with Validation for Laravel

Csv import with Validation for Laravel

Trong một bài viết lúc trước, mình đã chia sẻ đến các bạn cách xây dựng một service import và export CSV sử dụng Facades, nếu có bạn nào không biết hoặc đã quên các bạn có thể tham khảo lại bài viết t...

Encrypted HTTP Live Streaming with Laravel FFMpeg

Encrypted HTTP Live Streaming with Laravel FFMpeg

HTTP Live Streaming (HLS)  HTTP Live Streaming (HLS) là một trong những giao thức phát trực tuyến video được sử dụng rộng rãi nhất . Mặc dù nó được gọi là HTTP "live" streaming, nhưng nó được sử dụn...

ManhDanBlogs