As of Laravel 11.9 now you can stop instructions like database migrations from by chance operating in manufacturing environments with a Prohibitable
trait:
use IlluminateConsoleCommand;
use IlluminateConsoleProhibitable;
class SomeDestructiveCommand extends Command
{
use Prohibitable;
}
// SomeDestructiveCommand::prohibit($this->app->isProduction());
The Laravel framework contains some database instructions that embody the Prohibitable
trait, reminiscent of db:wipe
, migrate:contemporary
, migrate:refresh
, and migrate:reset
:
public operate boot(): void
{
FreshCommand::prohibit();
RefreshCommand::prohibit();
ResetCommand::prohibit();
WipeCommand::prohibit();
}
Utilizing the DB
Facade, you’ll be able to prohibit harmful database instructions constructed into Laravel:
// Prohibits: db:wipe, migrate:contemporary, migrate:refresh, and migrate:reset
DB::prohibitDestructiveCommands($this->app->isProduction());
The prohibit()
methodology accepts a Boolean
argument that defaults to true
, and you’ll conditionally stop instructions from operating utilizing no matter logic you want, as a way to nonetheless run them in growth environments:
public operate boot(): void
{
YourCommand::prohibit($this->app->isProduction());
}