$exitCode = Artisan::call('reports:send', ['user' => 7, '--queue' => true]);
$output = Artisan::output();
Artisan::queue('reports:send', ['user' => 7])->onQueue('reports'); // у черзі
Artisan::call() виконує команду синхронно в поточному процесі й повертає код виходу. Artisan::queue() ставить виконання в чергу.
З іншої команди - $this->call('cache:clear') або $this->callSilently() без виводу.
Коли це доречно:
- адмін-кнопка «перебудувати індекс», що запускає наявну команду;
- команда-оркестратор, яка по черзі викликає інші;
- тести консольних команд.
Коли краще інакше: якщо логіку з команди потрібно викликати з контролера, її виносять у клас (дію чи сервіс), який викликають і команда, і контролер. Команда - це інтерфейс для CLI з парсингом аргументів і виводом у консоль; тягнути цей шар у веб-запит означає зайве перетворення параметрів у рядки й назад.
Обережно з Artisan::call() у запиті: важка команда заблокує запит на весь час виконання. Для довгого - черга.