我正在 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粉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-播種機
但是,我建議不要走這條路,而是建立將為您完成所有這些操作的部署腳本。與此一樣,您將此路由暴露給將使用該應用程式的所有用戶,惡意用戶可以利用它。