Я создал простую черту для генерации индикатора выполнения во время выполнения команд.
<?php
namespace App\Console\Commands;
trait ProgressBarOutput
{
public function runProcess(\Countable $countable, callable $callback)
{
$bar = $this->output->createProgressBar(count($countable));
$bar->start();
foreach ($countable as $item) {
call_user_func($callback, $item);
$bar->advance();
}
$bar->finish();
$this->line('');
}
}
Это работает внутри моей страницы команд:
<?php
namespace App\Console\Commands;
use App\Console\Commands\ProgressBarOutput;
use Illuminate\Console\Command;
class MigrateUsers extends Command
{
use ProgressBarOutput;
protected $signature = 'migrate:users';
protected $description = 'Migrate users table from old to new';
public function __construct()
{
parent::__construct();
}
public function handle()
{
$this->info("users");
$rows = \DB::connection('old')->table('users')->get();
$this->runProcess($rows, function($row) {
\DB::connection('mysql')->table('users')->insert([
'id' => $row->id,
'name' => $row->name,
'surname' => $row->surname,
]);
});
$this->info("cars");
$rows = \DB::connection('old')->table('cars')->get();
$this->runProcess($rows, function($row) {
\DB::connection('mysql')->table('cars')->insert([
'id' => $row->id,
'model' => $row->model,
]);
});
}
}
Проблема возникает, когда я пытаюсь чтобы разделить эти микроимпорты на отдельные файлы, затем объединить их:
public function handle()
{
\Artisan::call("migrate:users");
\Artisan::call("migrate:cars");
}
Команды вызываются правильно, но не выводятся выходные данные и индикатор выполнения. Вы когда-нибудь сталкивались с такой проблемой?
Спасибо!