Как запустить команду в ядре Laravel после другой успешной команды - PullRequest
0 голосов
/ 19 июня 2019

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

P.S: у меня есть оператор if, который запрещает запуск этих команд на рабочем сервере.

$schedule->command('db:seed')->after(function () use ($schedule) : void {
    $schedule->command('my-command:remove-users-from-tables')
        ->everyThirtyMinutes()
        ->environments(['demo', 'local']);
});

Я ожидаю запустить сеялку сразу после того, как "моя команда" будет успешно выполняться каждые тридцать минут. Однако, таким образом, работает только db:seed.

1 Ответ

0 голосов
/ 20 июня 2019

Я проверил исходный код для Подсветка \ Консоль \ Планирование \ Расписание класс.

Я думаю, когда мы говорим:

$schedule->command(...);

Команда ремесленника будетбыть запланированным, не запускаться сразу.

Поэтому, когда вы пишете так:

$schedule->command('first-command')->after(function () use ($schedule) {
    $schedule->command('second-command');
});

Вторая команда будет зарегистрирована, а не будет запущена сразу после первой команды.

Поэтому лучший подход, который я могу придумать, - это запустить вторую команду внутри первой команды в соответствии с этой ссылкой

Вы можете попробовать что-то вроде этого:

namespace App\Console\Commands;

use Illuminate\Console\Command;

class RemoveUsersFromTable extends Command
{
    public function handle()
    {
        // Do something to remove users from table.

        $this->call('db:seed');
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...