Ara*_*our 1 laravel artisan-migrate laravel-artisan
我创建了一个命令来对一个非常大的数据库表进行一些数据操作,因为它需要足够的时间来完成,我利用了进度条的好处加上在控制台上回显了一些信息。
为了自动化操作并减少人为错误,我想使用以编程方式执行命令的样式在 Laravel 迁移中调用我的命令并且它可以工作,但问题是它不会从控制台内的相应命令打印任何输出
我想我应该将当前使用的输出缓冲区传递artisan:migrate给Artisan::call函数以使其工作,但没有运气在迁移中访问它
有什么建议?
扩展@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)