Laravel: определить, выполняются ли миграции

Я настроил несколько прослушивателей событий, в которых я хотел бы определить, выполняю ли я миграцию базы данных или обычный запрос/команду.

Есть ли способ узнать это? Глобальный флаг? Окружающая обстановка?

Заранее спасибо.

Я не вижу ничего встроенного. Возможно, вы могли бы использовать PHP debug_backtrace, чтобы определить, что в настоящее время используется файл миграции.

ceejayoz 14.03.2019 18:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
5
1
1 039
2

Ответы 2

Вы можете проверить, используется ли консоль с помощью App::runningInConsole() ... этого может быть достаточно в зависимости от того, как вы выполняете миграцию.

Обновлять:

Хорошо, покопавшись еще немного, похоже, вы можете найти нужную информацию, используя следующий пример:

if (app()->runningInConsole()) {
    // we are running in the console
    $argv = \Request::server('argv', null);

    // :$ php artisan migrate:refresh -v
    //
    // gives:
    //
    // $argv = array (
    //      0 => 'artisan',
    //      1 => 'migrate:refresh',
    //      2 => '-v',
    // )  

    if ($argv[0] == 'artisan' && \Illuminate\Support\Str::contains($argv[1],'migrate')) {
        // we are running the artisan migrate command
    }
}

Источник: Как получить текущую консольную команду в Laravel

Я хотел бы отметить, что если вы используете команды Artisan для чего-либо еще, включая встроенный cron Laravel, это применимо и к этому.

ceejayoz 14.03.2019 20:04

@Peter на самом деле недостаточно ... Я не хочу, чтобы он срабатывал при каждой команде мастера ... Только migrate. Есть ли способ получить текущую команду?

Gonçalo Marrafa 15.03.2019 11:06

Я добавил обновление, которое может предоставить вам необходимую информацию некрасивым, но функциональным способом.

Peter 15.03.2019 18:55

На самом деле, Laravel запускает несколько событий во время выполнения миграции:

Illuminate\Database\Events\MigrationsStarted: скоро будет выполнена партия миграций.

Illuminate\Database\Events\MigrationsEnded: Выполнение пакета миграций завершено.

Illuminate\Database\Events\MigrationStarted : Будет выполнена одиночная миграция.

Illuminate\Database\Events\MigrationEnded : выполнение одной миграции завершено.

Вы можете использовать это, чтобы делать все, что вы хотите. Например:

// change default Log channel when running migrations
Event::listen(function (MigrationsStarted $event) {
    config()->set('logging.default', 'migration');
});

В вашем случае вы можете установить ключ в файлах конфигурации вашего приложения, например app.running_migrations, и установить его на true в прослушивателе событий.

Другие вопросы по теме