我发现使用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 服务器上正常运行。
编辑
我当前的解决方案是将我的播种器逻辑放在常规类(不扩展基本播种器类)中,并如上所示调用它们。