Laravel индикатор выполнения перезаписывается - PullRequest
1 голос
/ 06 апреля 2020

У меня есть команда, где я делаю 3 цикла, я хочу показать 3 индикатора выполнения для каждого l oop. В моем выводе индикатор выполнения перезаписывается, и я вижу только 1.

Мой код:

public function handle()
{
    $this->setUsers('a', UserModel::all()->where('type', 'a'));
    $this->setUsers('b', UserModel::all()->where('type', 'b'));
    $this->setUsers('c', UserModel::all()->where('type', 'c'));
}


private function setUsers(string $type, $users)
{
    $bar = $this->output->createProgressBar(count($users));
    $bar->start();

    /** @var UserModel $user */
    foreach ($users as $user) {
        $user->update(['type' => [$type]]);
        $bar->advance();
    }

    $bar->finish();
}

enter image description here

Цели вот, чтобы увидеть 3 индикатора выполнения, которые закончили.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Вам необходимо создать отдельный раздел, например здесь

use Symfony\Component\Console\Helper\ProgressBar;

...

private $symOutput;
public function run(InputInterface $input, OutputInterface $output)
{
    $this->symOutput = $output;
    return parent::run($input, $output);
}

public function handle()
{
    $this->setUsers('a', UserModel::all()->where('type', 'a'));
    $this->setUsers('b', UserModel::all()->where('type', 'b'));
    $this->setUsers('c', UserModel::all()->where('type', 'c'));
}


private function setUsers(string $type, $users)
{
    $section = $this->symOutput->section();
    $bar = new ProgressBar($section, count($users));
    $bar->start();

    /** @var UserModel $user */
    foreach ($users as $user) {
        $user->update(['type' => [$type]]);
        $bar->advance();
    }

    $bar->finish();
}
0 голосов
/ 06 апреля 2020

Это работает для меня, когда я добавляю новую строку в вывод:

private function setUsers(string $type, $users)
{
    $bar = $this->output->createProgressBar(count($users));
    $bar->start();

    /** @var UserModel $user */
    foreach ($users as $user) {
        $user->update(['type' => [$type]]);
        $bar->advance();
    }

    print "\n";

    $bar->finish();
}

Вы также можете найти хорошие примеры здесь , например, одновременное отображение всех индикаторов выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...