Laravel以编程方式从web.php中调用artisan命令

时间:2018-03-07 18:23:39

标签: php laravel artisan laravel-5.6

我有以下路线:

Route::get('/beneficiaries/seed', function () {
    echo "<p>Database seeding started...</p>";
    $exitCode = Artisan::call('db:seed');
    echo "<p>Database seeding completed.</p>";
});

在我的本地环境中,当我访问'/ beneficiaries / seed'时,它会为数据库播种。但是,如果我在生产中做同样的事情,那就没有。我刚刚复制了播种机类和路线文件。

DatabaseSeeder:

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        $this->call(BeneficiariesTableSeeder::class);
    }
}

BeneficiariesTableSeeder:

class BeneficiariesTableSeeder extends Seeder
{
    public function run()
    {
        //seeding logic...
    }
}

为什么我的制作Artisan命令没有被执行? (我没有使用数据库事务。即使没有它,本地数据库也会被播种,因为没有错误被引发。)

1 个答案:

答案 0 :(得分:4)

当您在生产中运行php artisan db:seed时,会出现一条警告,询问您是否确定要将数据库播种到生产中。

生产中的此警告确认是Artisan::call('db:seed')无法在生产中使用的原因。

要绕过警告,您可以使用--force标记,如下所示:php artisan db:seed --force

<强>解决方案

要在代码中执行相同操作,请使用Artisan::call('db:seed', ['--force' => true]);