Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 如何调用Artisan::call(…)多次?(迁移然后播种)_Laravel_Laravel Artisan_Laravel Seeding - Fatal编程技术网

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