首页  >  问答  >  正文

如何在Laravel应用中成功创建表后运行数据填充器?

我正在 Laravel 8 中开发一个博客应用程序。

我正在准备将其部署在实时服务器上,并且我希望部署过程非常用户友好。

为此,我一直在为该应用程序开发一个“安装程序”:

routes\web.php 我有:

Route::get('/install', [InstallController::class, 'index']);

app\Http\Controllers\InstallController.php 中,我有这段代码,以便运行迁移如果没有用户表:

class InstallController extends Controller
{
    public function index() {
      if (!Schema::hasTable('users')) {
        Artisan::call('migrate'); 
      } 
      return redirect('/register')->with('success', 'Way to go! You can create an account.');
    }
}

上面的代码有效,所有表都已创建,并且邀请(第一个)用户注册。

问题

问题是我还没有找到一种方法让控制器在成功创建表后运行数据库播种器。

如何以简单且友好的方式实现此目标?

P粉764785924P粉764785924185 天前371

全部回复(1)我来回复

  • P粉921165181

    P粉9211651812024-03-31 09:43:48

    您可以通过运行 php artisan db:seed 或通过 Artisan 外观来完成此操作,例如 Artisan::call('db:seed');

    您的代码将是:

    class InstallController extends Controller
    {
        public function index() {
          if (!Schema::hasTable('users')) {
            Artisan::call('migrate');
            Artisan::call('db:seed'); 
          } 
          return redirect('/register')->with('success', 'Way to go! You can create an account.');
        }
    }
    

    来源: https://laravel.com/docs/9.x/seeding#running-播种机

    但是,我建议不要走这条路,而是创建将为您完成所有这些操作的部署脚本。与此一样,您将此路由暴露给将使用该应用程序的所有用户,恶意用户可以利用它。

    回复
    0
  • 取消回复