Nếu bạn sử dụng Laravel, bạn sẽ quen với việc di chuyển. Di chuyển là các lệnh mà bạn chạy trong Laravel để thay đổi cơ sở dữ liệu của mình để bạn không phải sử dụng cơ sở dữ liệu theo cách thủ công và các lệnh này có thể được chia sẻ với nhóm của bạn. Có các biến thể đối với lệnh di chuyển, bao gồm migrate:fresh
và migrate:refresh
tương tự nhau. Vì vậy, sự khác biệt là gì?
migrate:fresh
xóa tất cả các bảng trong cơ sở dữ liệu của bạn và chạy lại tất cả các lần di chuyển trong khi migrate:refresh
khôi phục từng đợt di chuyển của bạn rồi chạy lại tất cả các lần di chuyển. Sự khác biệt chỉ đơn giản là migrate:fresh
làm trống cơ sở dữ liệu của bạn ngay lập tức trong khi migrate:refresh
làm từng bước một
Như bạn có thể thấy trong hình ảnh trên cùng, migrate:fresh
đã xóa tất cả các bảng nhưng migrate:refresh
tuyên bố rằng nó đã khôi phục tất cả các lần di chuyển
Mặc dù các phương pháp khác nhau, nhưng chúng có cùng một mục đích. Cả hai đều được sử dụng khi bạn muốn chạy lại tất cả các lần di chuyển của mình. Ví dụ: bạn muốn xóa tất cả dữ liệu của mình khi phát triển, thì bạn có thể sử dụng một trong hai lệnh đó
Lệnh
Tài liệu Laravelmigrate:fresh
sẽ loại bỏ tất cả các bảng khỏi cơ sở dữ liệu và sau đó thực thi lệnhmigrate
Lệnh
Tài liệu Laravelmigrate:refresh
sẽ khôi phục tất cả các lần di chuyển của bạn và sau đó thực thi lệnhmigrate
. Lệnh này tạo lại toàn bộ cơ sở dữ liệu của bạn một cách hiệu quả
quay lui là gì?
lệnh rollback khôi phục đợt di chuyển cuối cùng, có thể bao gồm nhiều tệp di chuyển. Quay lại đây có nghĩa là hoàn tác quá trình di chuyển của bạn. Cách rollback hoạt động là chạy chức năng down trong quá trình di chuyển của bạn khi bạn chạy lệnh migrate:refresh
2. Quá trình di chuyển được thực hiện theo đợt, nghĩa là nếu trong một đợt bạn chạy 2 lần di chuyển, thì 2 lần di chuyển đó sẽ được khôi phục
Hy vọng bạn hiểu rollback nghĩa là gì nếu trước đây bạn không hiểu
Chúng có thường được sử dụng không?
Chúng chủ yếu được sử dụng để phát triển trên máy chủ cục bộ của bạn. Chà, ngay cả rollback cũng không được khuyến nghị sử dụng khi phát triển. Rõ ràng là bạn không muốn mất dữ liệu quý giá về sản xuất. Bạn có thể mất dữ liệu khó kiếm được nếu chạy các lệnh đó
Nhưng, trong quá trình phát triển, có thể chấp nhận được. Có thể có trường hợp bạn muốn bắt đầu lại hoặc bạn đã thực hiện các lần di chuyển sai. Vì vậy, câu trả lời là có trong quá trình phát triển và không trong quá trình sản xuất
Cái nào hiệu quả hơn?
Thực tế là hầu hết các nhà phát triển không thực sự kiểm tra chức năng down của họ trong quá trình di chuyển của họ. Họ chỉ viết nó trong trường hợp cần thiết. Nếu chức năng xuống bị sai, quá trình khôi phục sẽ bị xáo trộn. Vì vậy, xem xét rằng migrate:refresh
phụ thuộc vào hàm down, có thể có lỗi. Vì vậy, tốt hơn là sử dụng migrate:fresh
không phụ thuộc vào các hàm down và chỉ cần làm trống cơ sở dữ liệu của bạn để điền lại
Tuyên bố đóng cửa
Vì vậy, có bạn đi, đó là sự khác biệt. Hi vọng bạn đã có câu trả lời thỏa mãn
Bây giờ bạn đã hiểu thêm về Laravel, nếu bạn đang tìm nơi lưu trữ Ứng dụng Laravel của mình, tôi khuyên dùng Cloudways. Nó tương thích, nhanh, đáng tin cậy và có tùy chọn cụ thể cho Laravel. Ngoài ra còn có rất nhiều tài nguyên về Laravel hosting trên Cloudways. Đi trước và kiểm tra xem nó ra
Nếu bạn đang muốn làm mới kỹ năng PHP của mình, bạn có thể thử khóa học PHP miễn phí của Codecademy. Hãy tiếp tục và kiểm tra giáo trình để xem nó có phù hợp với bạn không. Nếu bạn quan tâm, hãy đi và dùng thử miễn phí
Vui lòng kiểm tra phần còn lại của blog của tôi nếu bạn quan tâm đến các chủ đề phát triển web, đặc biệt là Laravel và JavaScript
Chuyển đến phần di chuyển của bạn và đối với các bảng bạn không muốn bỏ, trong phương thức up[], hãy thêm kiểm tra có điều kiện để bỏ qua quá trình di chuyển nếu bảng vẫn tồn tại. Bạn cần làm điều này để sau này php artisan migrate
không báo lỗi về bảng hoặc cột đã tồn tại
Laravel có một lệnh migrate:refresh
để xây dựng cơ sở dữ liệu bằng cách di chuyển. Để xóa cơ sở dữ liệu, trước tiên, nó sẽ khôi phục tất cả các lần di chuyển bằng cách sử dụng phương pháp down
trong mỗi lần di chuyển
Nhưng nếu bạn không sử dụng phương pháp down
trong các dự án của mình thì sao?
Gói này chứa một lệnh
// app/Console/Kernel.php protected $commands = [ ... \Spatie\MigrateFresh\Commands\MigrateFresh::class, ]0 sẽ xóa tất cả các bảng trong cơ sở dữ liệu của bạn bất kể bạn đã thiết lập phương thức
down
trong mỗi lần di chuyển hay chưaBưu thiếp
Bạn có thể tự do sử dụng gói này [được MIT cấp phép], nhưng nếu nó được đưa vào môi trường sản xuất của bạn, chúng tôi đánh giá cao việc bạn gửi cho chúng tôi một tấm bưu thiếp từ quê hương của bạn, đề cập đến [những] gói mà bạn đang sử dụng.
Địa chỉ của chúng tôi là. Spatie, Samberstraat 69D, 2060 Antwerp, Bỉ
Những tấm bưu thiếp tốt nhất được xuất bản trên trang web của chúng tôi
Yêu cầu
Lệnh này hỗ trợ cơ sở dữ liệu MySQL, sqlite, PostgreSQL và MS SQL
Ghi chú. lệnh
// app/Console/Kernel.php protected $commands = [ ... \Spatie\MigrateFresh\Commands\MigrateFresh::class, ]0 được bao gồm theo mặc định trong Laravel 5. 5
Cài đặt
Bạn có thể cài đặt gói qua nhà soạn nhạc
composer require spatie/laravel-migrate-fresh
Tiếp theo, thêm lớp
// app/Console/Kernel.php protected $commands = [ ... \Spatie\MigrateFresh\Commands\MigrateFresh::class, ]3 vào nhân bảng điều khiển của bạn
// app/Console/Kernel.php protected $commands = [ ... \Spatie\MigrateFresh\Commands\MigrateFresh::class, ]
Cách sử dụng
Lệnh này sẽ loại bỏ tất cả các bảng khỏi cơ sở dữ liệu của bạn và chạy tất cả các lần di chuyển
php artisan migrate:fresh
Xin lưu ý rằng lệnh sẽ đánh sập tất cả các bảng trong cơ sở dữ liệu. Các bảng không thuộc ứng dụng của bạn cũng sẽ bị loại bỏ
Bằng cách gắn thẻ trên tùy chọn
// app/Console/Kernel.php protected $commands = [ ... \Spatie\MigrateFresh\Commands\MigrateFresh::class, ]4, tất cả các seeder cũng sẽ chạy
php artisan migrate:fresh --seed
Nếu lệnh đang được thực thi trong môi trường sản xuất, trước tiên sẽ yêu cầu xác nhận. Để chặn xác nhận, hãy sử dụng tùy chọn
// app/Console/Kernel.php protected $commands = [ ... \Spatie\MigrateFresh\Commands\MigrateFresh::class, ]5
php artisan migrate:fresh --force
Sự kiện
Gói này kích hoạt một số sự kiện mà bạn có thể nối vào để thực hiện một số logic bổ sung xây dựng lại cơ sở dữ liệu
// app/Console/Kernel.php protected $commands = [ ... \Spatie\MigrateFresh\Commands\MigrateFresh::class, ]
6. sẽ bị sa thải ngay trước khi rơi bàn đầu tiên// app/Console/Kernel.php protected $commands = [ ... \Spatie\MigrateFresh\Commands\MigrateFresh::class, ]
7. sẽ được kích hoạt ngay sau khi tất cả các bảng đã bị loại bỏ và trước khi chạy// app/Console/Kernel.php protected $commands = [ ... \Spatie\MigrateFresh\Commands\MigrateFresh::class, ]
8 bước di chuyển
Nhật ký thay đổi
Vui lòng xem CHANGELOG để biết thêm thông tin về những thay đổi gần đây
thử nghiệm
Để chạy thử nghiệm, bạn nên thiết lập một cơ sở dữ liệu mysql trống
// app/Console/Kernel.php protected $commands = [ ... \Spatie\MigrateFresh\Commands\MigrateFresh::class, ]9. Tên người dùng phải là
php artisan migrate:fresh0, mật khẩu bắt buộc phải trống
$ composer test
Đóng góp
Vui lòng xem ĐÓNG GÓP để biết chi tiết
Bảo vệ
Nếu bạn phát hiện ra bất kỳ vấn đề nào liên quan đến bảo mật, vui lòng gửi email tới freek@spatie. thay vì sử dụng trình theo dõi vấn đề
Tín dụng
- Freek Van der Herten
- Tất cả những người đóng góp
Mã ban đầu để xóa tất cả các bảng trong db Postgresql được cung cấp bởi Jonathan Reinink và được xem xét bởi Peter Matseykanets. Peter cũng đã thêm hỗ trợ cho Sqlite
Giới thiệu về Spatie
Spatie là một công ty thiết kế web có trụ sở tại Antwerp, Bỉ. Bạn sẽ tìm thấy tổng quan về tất cả các dự án nguồn mở của chúng tôi trên trang web của chúng tôi