我创建了一个命令来对非常大的数据库表进行一些数据操作,并且由于花费了足够的时间来完成操作,所以我利用了进度条的好处以及在控制台上回显一些信息。
要自动执行操作并减少人为错误,我想使用programmatically-executing-commands样式在laravel迁移中调用我的命令,它可以工作,但问题是它不会在控制台内打印相应命令的任何输出
我认为我应该将artisan:migrate
所使用的当前Output-buffer传递给Artisan::call
函数,以使其正常工作,但是在迁移过程中没有运气访问它
有什么建议吗?
答案 0 :(得分:4)
在@ettdro's answer上扩展后,Artisan::call
方法具有以下签名:
Artisan::call(string $command, array $parameters = [], $outputBuffer = null);
如您所见,该方法接受输出缓冲区作为其第3个参数。您可以将该输出缓冲区传递给该方法,命令日志将显示在控制台上。
这是一个例子:
<?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);
}
}
答案 1 :(得分:1)
您可以在调用Artisan命令后使用Symfony提供的public static
在控制台中打印出来。确保像所需的ConsoleOutput
这样在所需的.php文件中使用它。
您可能会遇到这样的事情:
use Symfony\Component\Console\Output\ConsoleOutput;
在我的示例中,您还可以在文本中添加颜色,这对于使错误和成功具有更好的视觉效果很有用,请参见以下链接:https://symfony.com/search?q=ConsoleOutput