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

我有以下路线:

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

在我的本地环境中,当我访问“ /受益人/种子”时,它将为数据库添加种子.但是,如果我在生产中也这样做,那就不会.我只是复制了播种器类和路由文件.

DatabaseSeeder:

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

受益人表播客:

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

为什么我的生产Artisan命令无法执行? (我没有使用过数据库事务.即使没有它,由于没有引发err,本地db也被植入了种子.)

解决方法:

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

生产中的此警告确认是Artisan :: call(‘db:seed’)在生产中不起作用的原因.

为了避免警告,您可以使用–force标志,如下所示:php artisan db:seed –force.

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

上一篇:Laravel 自定命令以及生成文件


下一篇:Laravel 数据库的迁移和填充