Các lệnh `Di cư: Làm mới` và` Di cư: Reset` trong Laravel đều liên quan đến việc quản lý di chuyển cơ sở dữ liệu, nhưng chúng phục vụ các mục đích khác nhau và hoạt động theo những cách riêng biệt trong quá trình quản lý lược đồ cơ sở dữ liệu. Hiểu được sự khác biệt của họ là rất quan trọng đối với các nhà phát triển Laravel để xử lý hiệu quả các trạng thái cơ sở dữ liệu trong quá trình phát triển hoặc triển khai.
Di cư: Làm mới
Lệnh `Php Artisan Migrate: Refresh` được sử dụng để quay lại tất cả các lần di chuyển và sau đó chạy tất cả chúng lại. Điều này có nghĩa là nó quay trở lại mọi di chuyển đã được áp dụng (thực hiện phương thức `Down ()` của mỗi lần di chuyển) và sau đó chạy lại phương thức `up ()` cho mỗi lần di chuyển để xây dựng lại lược đồ cơ sở dữ liệu từ đầu.
- Nó làm gì:
- Quay lại tất cả các lần di chuyển (hoàn tác tất cả các thay đổi lược đồ).
- Nhập lại tất cả các di chuyển để xây dựng lại lược đồ cơ sở dữ liệu.
- Các trường hợp sử dụng điển hình:
- Hữu ích khi bạn muốn đặt lại lược đồ cơ sở dữ liệu trong khi vẫn giữ cấu trúc cơ sở dữ liệu nhất quán thông qua di chuyển.
- Cho phép thử nghiệm di chuyển để đảm bảo chúng có thể được áp dụng sạch sẽ nhiều lần.
-Thường được kết hợp với tùy chọn `--seed` (` Php Artisan Migrate: Refresh --seed`) để tái tạo cơ sở dữ liệu với dữ liệu hạt giống sau khi xây dựng lại nó.
- Thuận lợi:
- Giữ cấu trúc cơ sở dữ liệu nhất quán thông qua ứng dụng thích hợp của các phương thức `Down ()` và `Up ()`.
-có thể làm mới một số lần di chuyển hạn chế bằng cách sử dụng tùy chọn `--Step` (ví dụ:` Php Artisan Migrate: Refresh --Step = 5` sẽ quay trở lại và chạy lại năm lần di chuyển cuối cùng).
- Hiệu suất:
- Có thể chậm hơn `Di cư: Fresh` khi xử lý một số lượng lớn các lần di chuyển vì nó thực hiện phương thức` Down () `cho mỗi lần di chuyển trước khi áp dụng lại chúng.
- Dữ liệu:
- Vì nó quay lại tất cả các lần di chuyển, dữ liệu trong các bảng sẽ bị mất trừ khi được nối lại.
- Bảo tồn logic rollback được xác định bên trong di chuyển, vì vậy nó có thể ngăn ngừa sự không nhất quán nếu di chuyển xuống được viết cẩn thận.
Di cư: Đặt lại
Lệnh `Php Artisan Migrate: Reset` quay lại tất cả các di chuyển đã được áp dụng, trả lại cơ sở dữ liệu về trạng thái không di chuyển ban đầu của nó.
- Nó làm gì:
- Quay lại tất cả các lần di chuyển bằng cách thực hiện phương thức `Down ()` của mỗi lần di chuyển.
- Không giống như `Refresh`, nó không chạy lại các lần di chuyển.
- Các trường hợp sử dụng điển hình:
- Hữu ích khi bạn muốn hoàn toàn hoàn tác tất cả các cuộc di cư mà không áp dụng lại chúng.
- Giúp các kịch bản mà bạn cần xóa hoàn toàn lược đồ trước khi quyết định phải làm gì tiếp theo.
- Thuận lợi:
- Xóa tất cả các thay đổi lược đồ cơ sở dữ liệu dựa trên di chuyển.
- Dữ liệu:
- Như với `Refresh`, việc quay lại di chuyển dẫn đến mất dữ liệu bảng.
- Không có lược đồ sẽ tồn tại khi tất cả các cuộc di cư được đặt lại.
- Hành vi:
- Để lại cơ sở dữ liệu ở trạng thái không di chuyển.
- Yêu cầu chạy thủ công `Artisan Migrate 'sau đó nếu có ý định xây dựng lại lược đồ.
Bối cảnh bổ sung: Di cư: So sánh mới
Mặc dù không được hỏi trực tiếp, lệnh `di chuyển: Fresh` thường bị nhầm lẫn với` Refresh` và `Reset` và giúp làm rõ sự khác biệt hơn nữa:
- `Php Artisan Migrate: Fresh` thả tất cả các bảng trong cơ sở dữ liệu trực tiếp, mà không cần chạy các phương thức` Down () `, sau đó chạy tất cả các di chuyển.
- Nó nhanh hơn vì thay vì quay trở lại di chuyển bằng cách di chuyển, nó chỉ làm giảm tất cả các bảng.
- Lý tưởng cho các môi trường phát triển trong đó xóa sạch cơ sở dữ liệu mà không có logic rollback được chấp nhận.
-Giống như `Refresh`, nó có thể được kết hợp với` --eed` để tái bản dữ liệu (ví dụ: `Migrate: Fresh --eed`).
Giải thích sâu hơn về sự khác biệt
- Cách rollback xảy ra:
- `Làm mới` và` Reset` cả hai đều dựa vào các phương thức `Down ()` của mỗi lần di chuyển để hoàn tác các thay đổi lược đồ.
- `Reset` cuộn lại mọi thứ và dừng lại.
- `Refresh` quay lại mọi thứ và sau đó di chuyển mọi thứ một lần nữa.
- Trạng thái cơ sở dữ liệu sau lệnh:
- Sau khi `reset`, lược đồ cơ sở dữ liệu trống (không có bảng từ di chuyển).
- Sau khi `Refresh`, lược đồ cơ sở dữ liệu được xây dựng lại như thể mới di chuyển.
- Mất dữ liệu:
- Cả hai lệnh gây mất dữ liệu khi tất cả các di chuyển được cuộn lại đầy đủ.
-'Làm mới` có thể tự động giới thiệu dữ liệu hạt giống nếu cờ `--seed` được sử dụng.
- Các trường hợp sử dụng trong vòng đời phát triển:
- Sử dụng `Refresh` khi phát triển hoặc thử nghiệm di chuyển và bạn muốn xây dựng lại lược đồ của mình trong khi có thể sắp xếp lại dữ liệu.
- Sử dụng `reset` để xóa hoàn toàn lược đồ di chuyển trước khi áp dụng các di chuyển mới theo cách thủ công hoặc chạy một di chuyển mới.
Ghi chú thực tế cho các nhà phát triển Laravel
- Cả hai lệnh phụ thuộc vào việc di chuyển được viết theo kịch bản đúng với các phương thức `up ()` và `Down ()`, có nghĩa là nếu các phương thức `Down ()` bị thiếu hoặc không hoàn chỉnh, các lệnh rollback (`làm mới` và` reset`) có thể bị lỗi hoặc để lại cơ sở dữ liệu ở trạng thái không nhất quán.
- `Refresh` có thể được coi là an toàn hơn` `Fresh 'trong các môi trường mà bạn muốn tôn trọng logic rollback và các mối quan hệ dữ liệu tiềm năng trong quá trình di chuyển.
- Không có lệnh nào được sử dụng một cách bất cẩn trên cơ sở dữ liệu sản xuất mà không cần sao lưu, vì tất cả dữ liệu sẽ bị mất.
- Chúng được thiết kế chủ yếu để sử dụng trong môi trường phát triển hoặc thử nghiệm cục bộ trong đó việc lặp lại lược đồ là thường xuyên và dữ liệu có thể được đặt lại mà không có hậu quả.
Bản tóm tắt
Sự khác biệt chính là:
- Di chuyển: Làm mới - Lấy lại tất cả các lần di chuyển, sau đó chạy tất cả các lần di chuyển.
- Di cư: Đặt lại - Lấy lại tất cả các lần di chuyển nhưng không chạy lại chúng.
`Di chuyển: Làm mới` xây dựng lại một cách hiệu quả lược đồ từ đầu thông qua rollback và di chuyển, cho phép làm lại lại và làm mới từng bước, trong khi `di chuyển: reset` chỉ cần trả lại cơ sở dữ liệu về trạng thái không di chuyển.
Cả hai lệnh là các công cụ cơ bản cho các nhà phát triển Laravel để quản lý các phiên bản cơ sở dữ liệu, nhưng chúng phục vụ các quy trình công việc khác nhau và có tác động duy nhất đến trạng thái cơ sở dữ liệu.
Sự hiểu biết này giúp chọn đúng lệnh cho các giai đoạn phát triển, thử nghiệm và triển khai ứng dụng khác nhau.
Mọi việc sử dụng nên xem xét các hàm ý mất dữ liệu, tính nhất quán của lược đồ ứng dụng và ý định của nhà phát triển để quản lý di chuyển cơ sở dữ liệu trong một dự án Laravel.