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



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

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

为此,我一直在开发一个"安装程序"。应用程序:

routesweb.php我有:

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

appHttpControllersInstallController.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.');
}
}

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

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

我怎样才能以简单友好的方式达到这个目标?

您可以通过运行php artisan db:seed或像Artisan::call('db:seed');一样通过Artisanfacade来实现

你的代码将是:

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

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

相关内容

最新更新