Làm cách nào để tạo di chuyển thủ công?

Các lược đồ cơ sở dữ liệu có thể được sửa đổi từ trạng thái hiện tại của chúng sang trạng thái mong muốn thông qua quá trình di chuyển. Điều này có thể bao gồm thêm bảng và cột, xóa mục hoặc thay đổi loại và ràng buộc

Chẳng hạn, nếu bạn đang làm việc trong một dự án nhóm và cần sửa đổi các yêu cầu của ứng dụng, bạn có thể cân nhắc việc thay đổi cơ sở dữ liệu

Thông thường, một bản cập nhật. tệp sql được chia sẻ với từng thành viên trong nhóm để nhập vào cơ sở dữ liệu của họ. Tuy nhiên, cách tiếp cận này không lý tưởng cũng như không thể mở rộng vì nhiều thứ có thể sai và khiến ứng dụng bị hỏng. Ví dụ: một thành viên trong nhóm có thể quên nhập tệp vào cơ sở dữ liệu của họ hoặc thậm chí nhập phiên bản lỗi thời của tệp. tập tin sql

Di chuyển hoạt động giống như kiểm soát phiên bản cho cơ sở dữ liệu của bạn, cho phép nhóm của bạn chia sẻ và xác định lược đồ cơ sở dữ liệu ứng dụng của bạn. Di chuyển Laravel rất cần thiết vì chúng giúp bạn giải quyết các vấn đề cộng tác cơ sở dữ liệu như vậy cho một nhóm. Các thành viên trong nhóm của bạn sẽ không cần cập nhật cơ sở dữ liệu của họ theo cách thủ công bất cứ khi nào họ lấy các thay đổi của bạn từ kiểm soát nguồn

Trong hướng dẫn này, bạn sẽ tìm hiểu tầm quan trọng của việc di chuyển trong ứng dụng Laravel của mình cũng như các lợi ích khác nhau của việc di chuyển Laravel cùng với các trường hợp sử dụng. Bạn cũng sẽ tìm hiểu các hành động, lệnh và sự kiện di chuyển khác nhau

Laravel Migration là gì?

Di chuyển Laravel cho phép các nhà phát triển nhanh chóng tạo, xóa và sửa đổi cơ sở dữ liệu ứng dụng mà không cần đăng nhập vào trình quản lý cơ sở dữ liệu hoặc thực hiện bất kỳ truy vấn SQL nào.  

Điều quan trọng cần biết là Laravel cung cấp hỗ trợ cho năm cơ sở dữ liệu. Bạn ít có khả năng gặp phải các vấn đề hỗ trợ khi sử dụng chúng. Chúng bao gồm những điều sau đây

  • MariaDB 10. 3+
  • mysql 5. 7+
  • PostgreSQL 10. 0+
  • SQLite 3. 8. 8+
  • Máy chủ SQL 2017+

Tại sao bạn lại sử dụng Laravel Migration?

Ngoài việc kiểm soát phiên bản, quá trình di chuyển giúp tự động hóa việc triển khai và tạo cơ sở dữ liệu tạm thời để chạy thử nghiệm dễ dàng hơn. Chúng cho phép bạn dễ dàng cấu trúc các mô hình và bảng của mình và là một tính năng cần thiết cho các trình gieo hạt trong ứng dụng của bạn

Seeding là một phương pháp đơn giản để tạo dữ liệu giả cho ứng dụng của bạn trong quá trình thử nghiệm

Di chuyển cũng hỗ trợ các nhà phát triển bằng cách hỗ trợ tổ chức môi trường, xác thực và triển khai an toàn các sửa đổi lược đồ

Với việc di chuyển, bạn có thể thay đổi các trường trong cơ sở dữ liệu của mình mà không cần xóa các bản ghi hiện có. Laravel theo dõi các lần di chuyển đã thực hiện trong cơ sở dữ liệu. Kết quả là, cơ sở dữ liệu có thể phát triển khi yêu cầu ứng dụng thay đổi

Cách tạo di chuyển

Mỗi tệp di chuyển xác định một bảng trong cơ sở dữ liệu của bạn. Nó chứa lược đồ để tạo hoặc sửa đổi bảng đó trong cơ sở dữ liệu. Laravel sử dụng lệnh Artisan

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
8 để tạo chuyển đổi cơ sở dữ liệu

php artisan make:migration create_users_table

Lệnh tạo một tệp di chuyển trong thư mục cơ sở dữ liệu/di chuyển của ứng dụng của bạn. Laravel sử dụng tiền tố dấu thời gian trong tên tệp di chuyển để xác định thứ tự của các lần di chuyển—ví dụ:

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
9

Laravel cố gắng xác định tên bảng và hành động di chuyển dựa trên tên tệp. Nó cũng điền trước tệp di chuyển với tên bảng được chỉ định từ dự đoán đã thử. Bạn có thể tự xác định tên bảng trong tệp di chuyển nếu lần thử không thành công

Bạn có thể chỉ định một đường dẫn cụ thể trong ứng dụng của mình để di chuyển được tạo bằng cách sử dụng đối số

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
0 với lệnh
id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
8

php artisan make:migration create_users_table --path=app/database/migrations

Cơ cấu di cư

Tệp di chuyển được tạo có định nghĩa lớp với các phương thức

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
2 và
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
3 theo mặc định. Phương thức
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
2 được gọi mỗi khi bạn chạy di chuyển. Tuy nhiên, phương thức
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
3 được gọi bất cứ khi nào quá trình di chuyển cơ sở dữ liệu quay trở lại

Bạn có thể thay đổi cơ sở dữ liệu bằng cách thêm các bảng, cột hoặc chỉ mục mới bằng cách sử dụng phương thức

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
6, trong khi phương thức
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
3 thực hiện các thao tác của phương thức
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
6 theo hướng ngược lại.  

Ví dụ: phương thức

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
6 chứa lược đồ để tạo bảng mới, thêm cột mới vào bảng hoặc sửa đổi cột hiện có, trong khi phương thức
php artisan make:migration create_users_table
40 chứa lược đồ để thực hiện ngược lại, như xóa bảng, xóa cột, v.v.

Bây giờ, bạn có thể sử dụng Schema Builder để tạo hoặc sửa đổi các bảng theo bất kỳ phương pháp nào trong số này

Hãy xác định một di chuyển để tạo một bảng có tên là người dùng

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}

php artisan make:migration create_users_table
41 cho thấy rằng chúng tôi đang tạo một bảng.
php artisan make:migration create_users_table
42  loại bỏ bảng đã chỉ định [trong trường hợp này là 'người dùng'] nếu bảng đó tồn tại trên cơ sở dữ liệu bất cứ khi nào quá trình di chuyển quay lại

Chạy di chuyển

Trước khi chạy quá trình di chuyển của bạn, hãy thiết lập kết nối cơ sở dữ liệu của bạn một cách chính xác. cập nhật các. env trong thư mục gốc của ứng dụng với cấu hình cơ sở dữ liệu phù hợp với ví dụ sau, thay thế trình giữ chỗ bằng chi tiết cho cơ sở dữ liệu của bạn

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=

Xóa bộ đệm là tùy chọn nhưng có thể cần thiết ở đây. Chạy lệnh sau trong terminal để làm điều đó

php artisan make:migration create_users_table
4

Sử dụng lệnh Artisan

php artisan make:migration create_users_table
43 để thực hiện tất cả các lần di chuyển đang chờ xử lý của bạn tới cơ sở dữ liệu

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
1

Dựa trên quá trình di chuyển được xác định trước đó, bạn sẽ thấy bảng người dùng trong cơ sở dữ liệu của mình với năm cột.

php artisan make:migration create_users_table
44,
php artisan make:migration create_users_table
45,
php artisan make:migration create_users_table
46,
php artisan make:migration create_users_table
47 và
php artisan make:migration create_users_table
48.
php artisan make:migration create_users_table
49 trong tệp di chuyển của bạn tạo các cột
php artisan make:migration create_users_table
47 và
php artisan make:migration create_users_table
48 cho cơ sở dữ liệu

Bảng, cột và chỉ mục

Một cơ sở dữ liệu chứa nhiều bảng. Cả cột và hàng đều có mặt trong mọi bảng

Chỉ mục là một cấu trúc dữ liệu hỗ trợ các hoạt động truy xuất dữ liệu dễ dàng trên các bảng với chi phí ghi bổ sung và không gian lưu trữ cần thiết để duy trì cấu trúc dữ liệu chỉ mục. Thay vì tìm kiếm qua từng hàng mỗi khi truy cập bảng cơ sở dữ liệu, bạn có thể sử dụng chỉ mục để định vị dữ liệu nhanh chóng

Những cái bàn

Tạo bảng

Bảng là tập hợp các đối tượng dữ liệu trong cơ sở dữ liệu được tổ chức theo định dạng bảng bao gồm các hàng và cột

Bạn có thể sử dụng phương thức

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
12 trên Schema facade để tạo một bảng cơ sở dữ liệu mới. Phương thức
id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
12 nhận hai đối số. tên của bảng làm đối số đầu tiên và một bao đóng chấp nhận đối tượng Blueprint để xác định bảng mới làm đối số thứ hai

Như bạn có thể thấy trong đoạn mã bên dưới,

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
14 chấp nhận 'người dùng', là tên bảng, làm đối số đầu tiên của chúng tôi. Đối số thứ hai là một hàm đóng trong đó lớp Blueprint với đối tượng $table của nó được truyền dưới dạng tham số. Đối tượng $table này được sử dụng để tạo/sửa đổi một cột cho bảng
id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
15

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
4

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
16. Điều này tạo ra một cột chuỗi có tên trong bảng người dùng

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
17. Điều này tạo ra một cột ID tăng tự động sẽ là khóa chính cho bảng này

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
18. Điều này tạo ra các cột updated_at và created_at TIMESTAMP. Các cột này sẽ chứa dấu thời gian khi dữ liệu được chèn và cập nhật trong cơ sở dữ liệu, tương ứng

Các cột này không bắt buộc. Bạn quyết định các cột sẽ bao gồm dựa trên nhu cầu của ứng dụng của bạn

Sửa đổi bảng của bạn

Để đổi tên bảng, hãy sử dụng phương pháp

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
19 trên mặt tiền
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
40. Trước khi đổi tên bảng, hãy xác nhận rằng tất cả các ràng buộc khóa ngoại trên bảng đó đều có tên rõ ràng trong tệp di chuyển của bạn thay vì cho phép Laravel gán tên dựa trên quy ước. Mặt khác, tên ràng buộc khóa ngoại sẽ tham chiếu đến bảng cũ

Trong đoạn mã bên dưới, chúng tôi đã đổi tên bảng

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
15 thành
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
42

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
2

Bạn có thể sử dụng phương thức

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
43 trên Schema facade để xóa bảng. Xoá bảng là thao tác ngược lại của việc tạo, do đó, nó có thể nằm trong phương thức
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
44 của tệp di chuyển. Bằng cách này, bảng sẽ bị hủy bất cứ khi nào bạn quay lại quá trình di chuyển của mình.   

Bây giờ trong đoạn mã bên dưới, hãy bỏ bảng

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
15. Bạn có thể thận trọng hơn bằng cách sử dụng
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
46, vì vậy nó sẽ kiểm tra xem bảng có tồn tại hay không trước khi xóa nó và nếu nó không tồn tại, nó sẽ tiếp tục thực hiện lệnh tiếp theo mà không cần cố gắng xóa

Nếu bạn sử dụng

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
47 cho một bảng không tồn tại, nó sẽ ngắt quá trình thực thi và trả về thông báo lỗi

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
8

Có nhiều phương pháp Schema hữu ích khác có trong tài liệu chính thức.  

Dưới đây là một số ví dụ

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
48. Cái này kiểm tra xem cơ sở dữ liệu có bảng tên là
id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
15 không

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
20. Điều này kiểm tra xem cơ sở dữ liệu có bảng
id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
15 với cột có tên là
php artisan make:migration create_users_table
46

Cột

Trong cơ sở dữ liệu quan hệ, mỗi hàng của cơ sở dữ liệu có một cột tương ứng chứa một nhóm các giá trị dữ liệu cùng kiểu. Các cột của bảng xác định cấu trúc của dữ liệu, trong khi các hàng của nó điền dữ liệu vào cơ sở dữ liệu

Tạo một cột

Để cập nhật các bảng hiện có với các cột bổ sung, hãy sử dụng phương thức table[] trong Schema facade. Nó chấp nhận các đối số giống như phương thức

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
23. Bạn có thể chọn loại dữ liệu của cột từ bất kỳ trường nào có sẵn này. Bây giờ, trong đoạn mã dưới đây, tôi sẽ thêm một cột bổ sung
id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
24 vào bảng
id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
15

php artisan make:migration create_users_table --path=app/database/migrations
7

Nếu bạn đã di chuyển một bảng vào cơ sở dữ liệu của mình và cần sửa đổi bảng đó [ví dụ: giả sử bạn đang thêm một cột khác], bạn nên tạo một tệp di chuyển mới để sửa đổi.  

Điều này là do tệp di chuyển đã được thực thi trừ khi bạn muốn khôi phục quá trình di chuyển, thực hiện các thay đổi đối với tệp và di chuyển lại. Quay ngược quá trình di chuyển có nghĩa là loại bỏ bảng/cột đó cũng như dữ liệu chứa trong đó; .  

Ngoài ra, Laravel cung cấp danh sách các công cụ sửa đổi cột cho phép một cột có các thuộc tính bổ sung. Với điều này, bạn có thể đặt giá trị mặc định cho cột ví bằng công cụ sửa đổi

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
26

php artisan make:migration create_users_table --path=app/database/migrations
0

Thả một cột

Để thả các cột, bạn có thể sử dụng phương pháp

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
27 trên mặt tiền
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
40. Trong phương pháp
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
3 của tệp di chuyển này, bạn có thể thả cột

php artisan make:migration create_users_table --path=app/database/migrations
1

Tôi đã viết một bài viết giải thích về việc thêm và xóa các cột khỏi các bảng hiện có trong quá trình di chuyển laravel

Sửa đổi một cột

Để sửa đổi/đổi tên một cột, bạn phải sử dụng trình quản lý gói Composer để cài đặt gói

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
80. Để cài đặt nó, hãy chạy lệnh này

php artisan make:migration create_users_table --path=app/database/migrations
2

Ngoài ra, bạn cần đưa cấu hình sau vào cấu hình/cơ sở dữ liệu của ứng dụng. php để sử dụng phương pháp

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
81

php artisan make:migration create_users_table --path=app/database/migrations
3

Giờ đây, bạn có thể sử dụng phương pháp

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
82 để sửa đổi loại và thuộc tính của các cột hiện có

php artisan make:migration create_users_table --path=app/database/migrations
4

Bạn có thể sử dụng phương pháp

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
83 trên mặt tiền
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
40 để đổi tên các cột. Hãy đổi tên
php artisan make:migration create_users_table
45 thành
id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
86

php artisan make:migration create_users_table --path=app/database/migrations
5

chỉ mục

Chỉ mục là công cụ mạnh mẽ được sử dụng ẩn trong cơ sở dữ liệu để tăng tốc độ truy vấn. Lập chỉ mục các truy vấn mạnh mẽ bằng cách cung cấp cho người dùng cách tìm kiếm dữ liệu họ cần một cách nhanh chóng

Một chỉ mục có thể được coi là một con trỏ tới thông tin của bảng. Tốt nhất nên cẩn thận khi sử dụng chỉ mục, đặc biệt là khi bảng được cập nhật thường xuyên. Chỉ mục luôn được tạo lại với mỗi lần cập nhật, làm chậm hệ thống

Một ví dụ tuyệt vời về loại chỉ mục là

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
87. Nó yêu cầu tất cả các giá trị trong cột đó là duy nhất. Điều này có nghĩa là các giá trị không thể được lặp lại trong cột đó. Trong ví dụ sau, bạn sẽ tạo chỉ mục cho cột
id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
88 trong bảng
id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
15 là duy nhất.  

php artisan make:migration create_users_table --path=app/database/migrations
6

Có các loại chỉ mục khả dụng khác, bao gồm khóa chính và khóa ngoại

Khóa ngoại trong bảng cơ sở dữ liệu quan hệ là một cột hoặc tập hợp các cột kết nối dữ liệu từ hai bảng khác nhau. Nó đề cập đến khóa chính của một bảng khác, tạo liên kết giữa hai bảng và dùng làm tham chiếu chéo giữa chúng

Bây giờ, hãy giới thiệu bảng

php artisan make:migration create_users_table --path=app/database/migrations
70 vào cơ sở dữ liệu của bạn trong tệp di chuyển mới. Bảng
php artisan make:migration create_users_table --path=app/database/migrations
70 phải có khóa ngoại để tham chiếu người dùng sở hữu cuốn sách. Một quy ước đặt tên tốt cho khóa ngoại trong Laravel là
php artisan make:migration create_users_table --path=app/database/migrations
72. Điều này là do Laravel cố đoán bảng và cột được tham chiếu dựa trên tên của khóa ngoại.  

Bạn cũng có thể đặt khóa ngoại ưa thích của mình và sử dụng các thuộc tính

php artisan make:migration create_users_table --path=app/database/migrations
73 và
php artisan make:migration create_users_table --path=app/database/migrations
74 để trỏ đến cột và bảng được tham chiếu tương ứng. Bằng cách này, Laravel bỏ qua dự đoán đã thử và sử dụng bảng và cột được tham chiếu đã được xác định

Sử dụng

php artisan make:migration create_users_table --path=app/database/migrations
75 trong ví dụ này tham chiếu cột
php artisan make:migration create_users_table
44 trên bảng
id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
15. Trong phương pháp này, bạn phải xác định user_id là một
php artisan make:migration create_users_table --path=app/database/migrations
78 trước khi xác định các thuộc tính khóa ngoại của nó.  

php artisan make:migration create_users_table --path=app/database/migrations
7

Laravel cũng cung cấp một phương thức ngắn hơn chỉ sử dụng tên của khóa ngoại để xác định tên của bảng và cột được tham chiếu. Điều này ngắn hơn vì sẽ không cần khai báo

php artisan make:migration create_users_table --path=app/database/migrations
78 và bao gồm các thuộc tính
php artisan make:migration create_users_table --path=app/database/migrations
73 và
php artisan make:migration create_users_table --path=app/database/migrations
74 cho khóa ngoại hoặc cũng khai báo
php artisan make:migration create_users_table --path=app/database/migrations
78. Bạn cũng có thể tiếp tục và bao gồm các thuộc tính khóa ngoại khác như
php artisan make:migration create_users_table --path=app/database/migrations
03, v.v.

php artisan make:migration create_users_table --path=app/database/migrations
8

Phương thức

php artisan make:migration create_users_table --path=app/database/migrations
03 là tùy chọn và cho phép bạn chỉ định tên bảng nếu các quy ước không phù hợp với tên bảng của bạn

Các phương thức

php artisan make:migration create_users_table --path=app/database/migrations
05 và
php artisan make:migration create_users_table --path=app/database/migrations
06 cho phép bạn chỉ định hành động cần thực hiện khi khóa ngoại bị xóa hoặc cập nhật. Hành động xếp tầng có nghĩa là khi các hàng trong bảng cha bị xóa, các cột khóa ngoại phù hợp trong bảng con cũng bị xóa, tạo ra một thao tác xóa xếp tầng. Do đó, nếu bạn xóa một người dùng, sách của họ cũng bị xóa

Mọi công cụ sửa đổi cột bổ sung phải được gọi trước

php artisan make:migration create_users_table --path=app/database/migrations
07

php artisan make:migration create_users_table --path=app/database/migrations
9

Xóa di chuyển

Không có lệnh Artisan để loại bỏ di chuyển. Tuy nhiên, việc xóa di chuyển phụ thuộc vào việc chúng đã được thực thi trong cơ sở dữ liệu hay chưa

Sử dụng

php artisan make:migration create_users_table --path=app/database/migrations
08 để kiểm tra xem quá trình di chuyển của bạn đã được thực hiện chưa nếu bạn không chắc chắn

Nếu bạn chưa chạy

php artisan make:migration create_users_table --path=app/database/migrations
09 để thực hiện di chuyển, bạn có thể xóa tệp di chuyển

Tuy nhiên, nếu việc di chuyển đã được thực hiện, bạn nên làm theo các bước sau

  1. Tốt nhất là quay lại quá trình di chuyển đó bằng cách chạy
    php artisan make:migration create_users_table --path=app/database/migrations
    10. Hãy nhớ rằng bạn không muốn khôi phục tất cả các lần di chuyển, vì vậy hãy bao gồm số lô của quá trình di chuyển sẽ được khôi phục. Nó sẽ giống như
    php artisan make:migration create_users_table --path=app/database/migrations
    11
    php artisan make:migration create_users_table --path=app/database/migrations
    12
  2. Sau đó, xóa tệp di chuyển

Dập tắt di chuyển

Khi ứng dụng của bạn phát triển theo thời gian, nó có thể cần nhiều lần di chuyển hơn. Do đó, bạn có thể đã nhận được nhiều tệp di chuyển trong thư mục cơ sở dữ liệu/di chuyển của mình. Bạn có thể nén các tệp di chuyển của mình thành một tệp SQL duy nhất bằng cách sử dụng lệnh

php artisan make:migration create_users_table --path=app/database/migrations
13

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
0

Khi bạn chạy lệnh này, Laravel sẽ tạo một tệp "lược đồ" trong thư mục cơ sở dữ liệu/lược đồ của ứng dụng của bạn.  

Sau đó, nếu bạn cố gắng di chuyển cơ sở dữ liệu của mình lần đầu tiên trong ứng dụng của mình, Laravel sẽ chạy các câu lệnh SQL trong tệp lược đồ trước. Sau đó, nó sẽ chạy các lần di chuyển còn lại không có trong kết xuất lược đồ sau khi chạy các dòng trong tệp lược đồ

sự kiện di chuyển

Laravel cung cấp một số sự kiện di chuyển công văn cho phép bạn thực hiện các hành động tiếp theo sau khi thao tác di chuyển đã được thực thi. Ví dụ: bạn có thể gửi email cho quản trị viên mỗi khi quá trình di chuyển hoàn tất.  

  • php artisan make:migration create_users_table --path=app/database/migrations
    14. Điều này được sử dụng khi một đợt di chuyển sắp được thực hiện
  • php artisan make:migration create_users_table --path=app/database/migrations
    15. Điều này được sử dụng khi một lần di chuyển sắp được thực hiện
  • php artisan make:migration create_users_table --path=app/database/migrations
    16. Điều này được sử dụng khi một đợt di chuyển đã kết thúc thực hiện
  • php artisan make:migration create_users_table --path=app/database/migrations
    17. Điều này được sử dụng khi một lần di chuyển đã kết thúc thực thi.  

Những sự kiện này mở rộng lớp

php artisan make:migration create_users_table --path=app/database/migrations
18 theo mặc định. Giờ đây, bạn có thể đăng ký một trình lắng nghe tương ứng cho bất kỳ sự kiện nào trong số này trong thư mục app\Providers\EventServiceProvider

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
1

Bạn có thể đọc tài liệu Laravel Events and Listeners chính thức để hiểu rõ hơn về các sự kiện

Các lệnh di chuyển khác

Laravel có một số lệnh Artisan khác giúp cho việc di chuyển trở nên dễ sử dụng, bao gồm các lệnh sau

Quay trở lại di chuyển

Bạn có thể muốn hoàn nguyên đợt di chuyển cuối cùng về cơ sở dữ liệu của mình. Thay vì xóa các cột và bảng khỏi trình quản lý cơ sở dữ liệu, bạn có thể chạy lệnh Artisan này

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
2

Bạn cũng có thể khôi phục một số đợt di chuyển bằng cách sử dụng tùy chọn

php artisan make:migration create_users_table --path=app/database/migrations
19 và số lô. Laravel theo dõi tất cả
php artisan make:migration create_users_table --path=app/database/migrations
20 trên bảng di chuyển, bao gồm cả số đợt di chuyển

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
3

Nó khôi phục hai đợt di chuyển cuối cùng vào cơ sở dữ liệu của bạn. Bạn có thể kiểm tra bảng di chuyển trong cơ sở dữ liệu của mình nếu bạn không chắc chắn về số lô di chuyển để khôi phục

Đặt lại di chuyển

Bạn có thể sử dụng lệnh

php artisan make:migration create_users_table --path=app/database/migrations
21 để khôi phục tất cả các lần di chuyển ứng dụng của mình trong cơ sở dữ liệu

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
4

Làm mới di chuyển

Bạn có thể sử dụng lệnh

php artisan make:migration create_users_table --path=app/database/migrations
22 để tạo lại toàn bộ cơ sở dữ liệu của mình. Nó khôi phục tất cả các lần di chuyển của bạn và thực hiện lại lệnh di chuyển

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
5

Lệnh đó thường bị nhầm với

php artisan make:migration create_users_table --path=app/database/migrations
23. Lệnh
php artisan make:migration create_users_table --path=app/database/migrations
23 loại bỏ tất cả các bảng trong cơ sở dữ liệu trước khi thực hiện lệnh di chuyển.  

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
6

Cần hết sức thận trọng với

php artisan make:migration create_users_table --path=app/database/migrations
25 trên các ứng dụng chia sẻ cơ sở dữ liệu vì nó loại bỏ tất cả các bảng trong cơ sở dữ liệu đó

Tạo một mô hình với di chuyển

Khi tạo một mô hình, bạn có thể sử dụng tùy chọn —migration [hoặc -m] để tạo một sự di chuyển cơ sở dữ liệu tương ứng

id[];
            $table->string['name'];
            $table->string['role'];
            $table->timestamps[];
        }];
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down[]
    {
        Schema::dropIfExists['user'];
    }
}
7

Sử dụng lệnh này, Laravel tạo một Thể loại. php tệp mô hình trong thư mục ứng dụng/Mô hình và tệp di chuyển

php artisan make:migration create_users_table --path=app/database/migrations
26 trong cơ sở dữ liệu/di chuyển

Bớt tư tưởng

Bạn đã đi một chặng đường dài, xin chúc mừng

Trong bài viết này, bạn đã học cách sử dụng di chuyển để cải thiện các ứng dụng Laravel của mình. Mã nguồn cho các tệp di chuyển, bao gồm các ví dụ được đánh dấu, có sẵn trên GitHub. Bạn cũng có thể tìm thêm thông tin về việc di chuyển Laravel trong tài liệu chính thức. Bây giờ bạn có thể thấy rằng việc di chuyển là cần thiết để theo dõi các thay đổi của cơ sở dữ liệu, hỗ trợ phát hiện lỗi và khôi phục trong trường hợp xảy ra lỗi

Nếu bạn muốn thấy sức mạnh của Laravel kết hợp với ButterCMS, hãy xem hướng dẫn của chúng tôi. Cách xây dựng blog với Laravel [và gửi thông báo chậm]

Làm cách nào để tạo bảng di chuyển trong Laravel?

Cách tạo bảng bằng Di chuyển trong Laravel? .
nghệ nhân php làm. di chuyển tạo_posts_table
nghệ nhân php di chuyển
nghệ nhân php làm. di chuyển create_posts_table --table=posts
nghệ nhân php di chuyển --path=/database/migrations/2020_04_01_064006_create_posts_table. php
nghệ nhân php di chuyển. phục hồi

Làm cách nào để tạo di chuyển trong Django?

Tóm lại, các bước cơ bản để sử dụng di chuyển Django giống như sau. .
Tạo hoặc cập nhật một mô hình
Run ./manage.py makemigrations .
Run ./manage.py migrate to migrate everything or ./manage.py migrate to migrate an individual app..
Lặp lại khi cần thiết

Di chuyển thủ công trong php là gì?

di chuyển nghệ nhân php xuất bản tất cả lược đồ của chúng tôi lên cơ sở dữ liệu . Lệnh này cũng tạo bảng trong cơ sở dữ liệu. nghệ nhân php di chuyển. status kiểm tra trạng thái di chuyển. di chuyển. status kiểm tra các lần di chuyển mà chúng tôi đã chạy.

Làm cách nào để tạo di chuyển từ cơ sở dữ liệu hiện có trong Laravel?

Chạy di chuyển Laravel trên cơ sở dữ liệu hiện có .
Mục lục. Mục lục. .
Tổng quan ngắn gọn. Khi chúng ta muốn tạo một bảng cơ sở dữ liệu trong Laravel, trước tiên chúng ta cần tạo mô hình của bảng. .
điều kiện tiên quyết. .
Bắt đầu. .
Sửa đổi tập tin mô hình. .
Sửa đổi tệp di chuyển. .
Chạy di chuyển. .
Tóm lược

Chủ Đề