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

标签 php laravel 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”时,它会为数据库播种。但如果我在生产中做同样的事情,它不会。我刚刚复制了播种器类和路由文件。

数据库播种器:

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

BeneficiariesTableSeeder:

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

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

最佳答案

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

生产中的这种警告确认是 Artisan::call('db:seed') 在生产中不工作的原因。

要避免警告,您可以像这样使用 --force 标志:php artisan db:seed --force

解决方案

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

关于php - Laravel 在生产中以编程方式从 web.php 调用 artisan 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49158851/

相关文章:

双引号中的 PHP 静态变量

php 用表情图像替换字符串。用mysql表情数据形成数组的问题

javascript - 尝试将一些 JavaScript 嵌入到 Laravel View 中的 foreach 循环中

laravel - Laravel 验证中避免使用小数

php - 从子类构造函数中访问父类方法

php - 如何将 php (5.5 >7.0) 项目转换为 exe 文件?

javascript - Codeigniter:在动态文本框/文本区域上生成 id

php - 使用 Artisan::call() 传递非选项参数

mysql - 使用 Homestead 时持久数据消失

PHP artisan migrate 不创建新表