Laravel 如何调用Artisan::call(…)多次?(迁移然后播种)
我发现,使用Laravel 如何调用Artisan::call(…)多次?(迁移然后播种),laravel,laravel-artisan,laravel-seeding,Laravel,Laravel Artisan,Laravel Seeding,我发现,使用Artisan::call()命令进行迁移,然后再次进行种子设定,可以实现正确的迁移,但数据库从未进行种子设定。这可能是一个bug,或者可能有一种方法可以刷新以前的命令 例如: Artisan::call('migrate', [ '--database' => 'tenant', '--path' => 'database/tenantMigrations', '--force' => true, ]); 然后: Ar
Artisan::call()
命令进行迁移,然后再次进行种子设定,可以实现正确的迁移,但数据库从未进行种子设定。这可能是一个bug,或者可能有一种方法可以刷新以前的命令
例如:
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();
我得到错误:调用null上的成员函数行()
值得注意的是,所有这些都可以在我当地的Homestead环境中正常工作,但不能在Forge管理的数字海洋服务器上正常工作
编辑
我当前的解决方案是将我的seeder逻辑放在常规类(不扩展基本seeder类)中,并像上面显示的那样调用它们 您可以创建包含所有所需选项的包装器命令,然后分别调用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'),
]);
问题是,无法运行两个Artisan命令。第二个被跳过。(参见原始帖子)查看我的更新,不要使用Artsian
facade,而是使用$this