Выполнение определенных миграций в Laravel: нет команды? Без проблем!

Laravel — это популярная платформа PHP, предоставляющая мощные инструменты миграции для управления схемой базы данных. Обычно для запуска миграции используется интерфейс командной строки php artisan. Однако могут возникнуть ситуации, когда вам потребуется выполнить конкретную миграцию без использования этой команды. В этой статье мы рассмотрим несколько способов достижения этой цели с практическими примерами кода.

Метод 1: программный запуск миграции
Один из способов запустить конкретную миграцию без использования интерфейса командной строки — это программно выполнить код миграции в вашем приложении Laravel. Вы можете создать собственный сценарий или использовать существующий сценарий для прямого вызова класса миграции. Вот пример:

use Illuminate\Database\Migrations\Migrator;
use Illuminate\Database\Migrations\MigrationRepositoryInterface;
$migrator = app(Migrator::class);
$repository = app(MigrationRepositoryInterface::class);
$repository->createRepository();
$migrator->run([$migrationName]);

Замените $migrationNameна конкретную миграцию, которую вы хотите выполнить. Этот метод позволяет обойти интерфейс командной строки и напрямую выполнить код миграции.

Метод 2: изменение таблицы миграции.
Другой подход — изменить таблицу migrationsнапрямую в вашей базе данных. Таблица migrationsотслеживает, какие миграции были выполнены. Вставив новую запись для конкретной миграции, которую вы хотите запустить, Laravel посчитает ее ожидающей и выполнит ее. Вот пример:

use Illuminate\Support\Facades\DB;
DB::table('migrations')->insert([
    'migration' => $migrationName,
    'batch' => 1,
]);

Замените $migrationNameна название миграции, которую вы хотите выполнить. Обязательно увеличьте значение batch, чтобы обеспечить правильный порядок миграции.

Метод 3: создание пользовательской команды Artisan
Если вы предпочитаете более структурированный подход, вы можете создать собственную команду Artisan в Laravel для выполнения желаемой миграции. Это позволяет выполнить миграцию с помощью интерфейса командной строки, но с помощью специальной команды, предназначенной для конкретной миграции. Вот пример того, как создать собственную команду:

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Artisan;
class RunSpecificMigrationCommand extends Command
{
    protected $signature = 'migrate:specific {name}';
    protected $description = 'Run a specific migration';
    public function handle()
    {
        $migrationName = $this->argument('name');
        Artisan::call('migrate', [
            '--path' => "database/migrations/{$migrationName}.php",
        ]);
    }
}

С помощью этой пользовательской команды вы можете запустить конкретную миграцию, используя следующую команду: php artisan migrate:specific {migrationName}.

Выполнить конкретную миграцию без использования интерфейса командной строки Laravel можно различными способами. В этой статье мы рассмотрели три подхода: программный запуск миграции, изменение таблицы миграций и создание собственной команды Artisan. Каждый метод обеспечивает гибкость и позволяет выполнять определенные миграции в соответствии с вашими требованиями.