master

laravel/framework

Last updated at: 29/12/2023 09:21

ResetCommand.php

TLDR

This file is a part of the Illuminate\Database\Console\Migrations namespace and contains the ResetCommand class. The ResetCommand class is a command line tool that is used to rollback all database migrations.

Methods

handle

This method is responsible for executing the console command. It starts by confirming if the user wants to proceed with the operation. If the user confirms, it proceeds by checking if the migration table exists. If the migration table does not exist, it displays a warning message. Finally, it resets the migrations by calling the reset method on the migrator instance.

Classes

ResetCommand

The ResetCommand class extends the BaseCommand class and is used as a command line tool to rollback all database migrations. It has the following properties:

  • $name: The name of the console command (migrate:reset).
  • $description: The description of the console command (Rollback all database migrations).
  • $migrator: An instance of the Migrator class.

The ResetCommand class has the following methods:

  • __construct: The constructor method which initializes the $migrator property.
  • handle: The method that is executed when the console command is run.
  • getOptions: A method that returns an array of console command options.
<?php

namespace Illuminate\Database\Console\Migrations;

use Illuminate\Console\ConfirmableTrait;
use Illuminate\Database\Migrations\Migrator;
use Symfony\Component\Console\Input\InputOption;

class ResetCommand extends BaseCommand
{
    use ConfirmableTrait;

    /**
     * The console command name.
     *
     * @var string
     */
    protected $name = 'migrate:reset';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Rollback all database migrations';

    /**
     * The migrator instance.
     *
     * @var \Illuminate\Database\Migrations\Migrator
     */
    protected $migrator;

    /**
     * Create a new migration rollback command instance.
     *
     * @param  \Illuminate\Database\Migrations\Migrator  $migrator
     * @return void
     */
    public function __construct(Migrator $migrator)
    {
        parent::__construct();

        $this->migrator = $migrator;
    }

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        if (! $this->confirmToProceed()) {
            return 1;
        }

        return $this->migrator->usingConnection($this->option('database'), function () {
            // First, we'll make sure that the migration table actually exists before we
            // start trying to rollback and re-run all of the migrations. If it's not
            // present we'll just bail out with an info message for the developers.
            if (! $this->migrator->repositoryExists()) {
                return $this->components->warn('Migration table not found.');
            }

            $this->migrator->setOutput($this->output)->reset(
                $this->getMigrationPaths(), $this->option('pretend')
            );
        });
    }

    /**
     * Get the console command options.
     *
     * @return array
     */
    protected function getOptions()
    {
        return [
            ['database', null, InputOption::VALUE_OPTIONAL, 'The database connection to use'],

            ['force', null, InputOption::VALUE_NONE, 'Force the operation to run when in production'],

            ['path', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, 'The path(s) to the migrations files to be executed'],

            ['realpath', null, InputOption::VALUE_NONE, 'Indicate any provided migration file paths are pre-resolved absolute paths'],

            ['pretend', null, InputOption::VALUE_NONE, 'Dump the SQL queries that would be run'],
        ];
    }
}