As of Laravel 11.9 you can now prevent commands like database migrations from accidentally running in production environments with a Prohibitable trait:

use Illuminate\Console\Command;
use Illuminate\Console\Prohibitable;

class SomeDestructiveCommand extends Command
{
    use Prohibitable;
}

// SomeDestructiveCommand::prohibit($this->app->isProduction());

The Laravel framework includes some database commands that include the Prohibitable trait, such as db:wipe, migrate:fresh, migrate:refresh, and migrate:reset:

public function boot(): void
{
    FreshCommand::prohibit();
    RefreshCommand::prohibit();
    ResetCommand::prohibit();
    WipeCommand::prohibit();
}

Using the DB Facade, you can prohibit destructive database commands built into Laravel:

// Prohibits: db:wipe, migrate:fresh, migrate:refresh, and migrate:reset
DB::prohibitDestructiveCommands($this->app->isProduction());

The prohibit() method accepts a Boolean argument that defaults to true, and you can conditionally prevent commands from running using whatever logic you need, so that you can still run them in development environments:

public function boot(): void
{
    YourCommand::prohibit($this->app->isProduction());
}
continue reading on laravel-news.com

⚠️ This post links to an external website. ⚠️