Disable/Refuse 'migrate:refresh' 当暂存数据库连接时

Disable/Refuse 'migrate:refresh' when the staging database is connected

在处理 Laravel 项目时,我经常在本地 MySQL 数据库(种子数据最少)和外部 staging 数据库(充满了代表性的、类似生产的数据)。我通过在 .env 文件中注释掉连接详细信息来切换。

对于我的本地数据库,我经常 运行 php artisan migrate:refresh --seed 来测试新模型和关系。但是我从来不想 运行 在登台数据库上执行此命令(不小心,当我忘记切换到本地数据库时)。

是否有 预执行 函数(或类似的东西)用于 migrate 命令我可以实现以首先检查我的 DB_HOST 是否有一些值,如果我检测到选择了暂存环境,则停止执行?

注意:禁用我的用户对登台数据库的写权限不是一个选项,因为我在该数据库上测试 inserts/deletes。

Laravel 已经根据使用的环境对 migrate Artisan 命令进行了健全性检查。

如果您将 APP_ENV 设置为 production,那么当您尝试 运行 没有 --forcemigrate 命令时,它会发出警告标志,并会通知您该应用程序正在生产中,并要求确认您希望 运行 此命令。

在你的情况下,我也会避免使用你在本地使用的“虚拟”数据,因为它不能代表生产数据。我会获取暂存数据库的副本并在本地使用它,因为它更能代表您在生产中实际使用的内容,并且它通过消除使用单独数据库的需要来回避您遇到的问题。实际上,您使用的方法本身就存在风险。