Laravel执行自定义命令时如何自动输入yes?多租户迁移求助
解决spatie/multi-tenancy生产环境租户迁移自动确认问题
问题背景
使用spatie/multi-tenancy开发多租户应用时,创建新租户需要执行数据库迁移。本地环境运行正常,但生产环境中迁移前会弹出确认提示,导致命令无法自动完成。
原执行命令:
Artisan::call("tenants:artisan 'migrate --seed' --tenant={$tenant->id}");
尝试过的无效操作:
- 给
tenants:artisan命令加--force参数,提示选项不存在 - 用
echo "y" | Artisan::call(...)管道输入确认,无效果
解决方案
方案一:把--force加到内部的migrate命令中
--force是migrate命令的选项,不是tenants:artisan的,所以要放到引号内的migrate命令里:
Artisan::call("tenants:artisan 'migrate --seed --force' --tenant={$tenant->id}");
方案二:用数组格式传递命令参数(更可靠)
Laravel推荐用数组拆分命令和参数,避免字符串解析的问题,确保选项正确传递:
Artisan::call('tenants:artisan', [ 'artisanCommand' => 'migrate', '--seed' => true, '--force' => true, '--tenant' => $tenant->id, ]);
方案三:模拟输入流自动确认
如果前两种方法都不适用,可以直接模拟用户输入"y"来跳过确认:
use Symfony\Component\Console\Input\StringInput; $command = Artisan::resolve('tenants:artisan'); $command->setInput(new StringInput("migrate --seed --tenant={$tenant->id}\ny\n")); $command->run();
内容的提问来源于stack exchange,提问作者Vromahya
相关产品推荐
相关产品推荐

