laravel - 如何多次调用 Artisan::call(...) ?(迁移然后播种)
问题描述
我发现使用Artisan::call()
命令进行迁移,然后再次播种会导致正确的迁移,但永远不会播种数据库。这可能是一个错误,或者可能有办法刷新上一个命令。
例如:
Artisan::call('migrate', [
'--database' => 'tenant',
'--path' => 'database/tenantMigrations',
'--force' => true,
]);
接着:
Artisan::call('db:seed', [
'--database' => 'tenant',
'--class' => 'TenantSeeder',
]);
如您所见,我在新创建的租户数据库上运行这些命令来“配置”它。这些命令中的每一个都单独工作,但不能一起工作。
我已经尝试寻找有关加入这两个命令的更多文档,同时能够指定播种机的类。这可能看起来像:
Artisan::call('migrate', [
'--database' => 'tenant',
'--path' => 'database/tenantMigrations',
'--force' => true,
'--seed' => true,
'--class' => 'TenantSeeder', // this is the only one I can't do, which is critical
]);
我也尝试过像这样运行播种机:
(new \TenantSeeder)->run();
我得到错误:Call to a member function line() on null
。
值得注意的是,所有这些都可以在我本地的 Homestead 环境中正常运行,但不能在 Forge 管理的 Digital Ocean 服务器上正常运行。
编辑
我当前的解决方案是将我的播种器逻辑放在常规类(不扩展基本播种器类)中,并如上所示调用它们。
解决方案
您可以使用所需的所有选项创建一个包装器命令,然后单独调用migrate
、seed
等命令:
php artisan make:command MigrateAndSeedCommand
该类可能类似于:
class MigrateAndSeedCommand extends Command
{
protected $signature = 'migrateandseed {--database=} {--path=} {--force} {--seed} {--class=}';
public function handle()
{
Artisan::call('migrate', [
'--database' => $this->option('database'),
'--path' => $this->option('path'),
'--force' => $this->option('force'),
]);
Artisan::call('db:seed', [
'--database' => $this->option('database'),
'--class' => $this->option('class'),
]);
}
}
可通过以下方式使用:
php artisan migrateandseed --database=tenants --path=database/tenantMigrations --force --seed --class=TenantSeeder
// or
Artisan::call('migrateandseed', [
'--database' => 'tenant',
'--path' => 'database/tenantMigrations',
'--force' => true,
'--seed' => true,
'--class' => 'TenantSeeder',
]);
编辑
使用$this
代替Artisan
,以及可选地对命令进行排队:
// or $this->queue
$this->call('db:seed', [
'--database' => $this->option('database'),
'--class' => $this->option('class'),
]);
推荐阅读
- xml - Layman 使用 //、/ 和 local-name() 对 XPath 的解释?
- python - 正则表达式在字符之间仅包含一位数字
- powershell - VS Code Powershell 切换用户
- php - 按钮中的数组值,PHP Laravel 框架
- asp.net-core - 在 ASP.NET Core 3.0 中向 AspNetUserRoles 表添加自定义列 - ASP.NET Core IDENTITY
- c++ - C++:C类没有命名类型(新场景)3个类
- python - CPython 扩展如何能够调用 CPython 内部定义的函数?
- python - Pandas 类别按类别排序
- php - 尝试使用 Chart.js 显示此图时,我的错误在哪里?
- python - 无法在 Mac (Python) 上导入 TA-Lib