Heim > Fragen und Antworten > Hauptteil
Ich entwickle eine Blogging-Anwendung in Laravel 8.
Ich bereite die Bereitstellung auf einem Live-Server vor und möchte, dass der Bereitstellungsprozess sehr benutzerfreundlich ist.
Dazu habe ich einen „Installer“ für die Anwendung entwickelt:
In routesweb.php
habe ich:
Route::get('/install', [InstallController::class, 'index']);
In appHttpControllersInstallController.php
habe ich diesen Code, um die Migration auszuführen wenn es keine Benutzertabelle gibt:
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.'); } }
Der obige Code funktioniert, alle Tabellen werden erstellt und der (erste) Benutzer wird zur Registrierung eingeladen.
Das Problem ist, dass ich keine Möglichkeit gefunden habe, den Controller den Datenbank-Seeder ausführen zu lassen, nachdem die Tabelle erfolgreich erstellt wurde.
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-播种机
但是,我建议不要走这条路,而是创建将为您完成所有这些操作的部署脚本。与此一样,您将此路由暴露给将使用该应用程序的所有用户,恶意用户可以利用它。