代码之家  ›  专栏  ›  技术社区  ›  Razvan Zamfir

在这个Laravel应用程序中成功创建表后,我如何运行表种子程序?

  •  0
  • Razvan Zamfir  · 技术社区  · 3 年前

    我正在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.');
        }
    }
    

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

    这个问题

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

    我怎样才能以轻松友好的方式实现这个目标?
    1 回复  |  直到 3 年前
        1
  •  1
  •   Ben    3 年前

    你可以通过跑步来完成 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-seeders

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