Laravel:在迁移中显示控制台命令的输出?

Ara*_*our 1 laravel artisan-migrate laravel-artisan

我创建了一个命令来对一个非常大的数据库表进行一些数据操作,因为它需要足够的时间来完成,我利用了进度条的好处加上在控制台上回显了一些信息。

为了自动化操作并减少人为错误,我想使用以编程方式执行命令的样式在 Laravel 迁移中调用我的命令并且它可以工作,但问题是它不会从控制台内的相应命令打印任何输出

我想我应该将当前使用的输出缓冲区传递artisan:migrateArtisan::call函数以使其工作,但没有运气在迁移中访问它

有什么建议?

Far*_*zad 5

扩展@ettdro 的回答,该Artisan::call方法具有以下签名:

Artisan::call(string $command, array $parameters = [], $outputBuffer = null);
Run Code Online (Sandbox Code Playgroud)

如您所见,该方法接受一个输出缓冲区作为其第三个参数。您可以将该输出缓冲区传递给该方法,命令日志将显示在控制台上。

下面是一个例子:

<?php

use App\Console\Commands\YourConsoleCommand;
use Illuminate\Database\Migrations\Migration;
use Symfony\Component\Console\Output\ConsoleOutput;


class SomeDbMigration extends Migration
{
    public function up()
    {
        $output = new ConsoleOutput();
        Artisan::call(YourConsoleCommand::class, ['--some-option' => true], $output);
    }

    public function down()
    {
        $output = new ConsoleOutput();
        Artisan::call(YourConsoleCommand::class, ['--some-option' => false], $output);
    }
}


Run Code Online (Sandbox Code Playgroud)