You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:05:20