它過2次天,我試着寫我的項目,由於一個簡單的嚮導安裝,目前我要瘋了一個問題我解決不了。Laravel 5.4:創建數據庫和運行工匠::調用(「遷移」)
需要
我正在開發一個sorta嚮導。該向導要求提供常用的數據庫設置:主機,端口,用戶名,密碼和數據庫名稱。
我要求創建一個數據庫的名字來源於形式,並與通常的文件中定義的遷移和種子填充它。
我不能使用RachidLaasri GitHub的項目,因爲規格不能接受。
什麼工作
到目前爲止,我設法創建一個數據庫,使用低級別的連接(使用新的\的mysqli)。這一步是必需的,因爲我們需要測試連接的每一步以返回適當的錯誤消息。
然後,我重寫與參數校正證明,包括數據庫名.ENV。到現在爲止還挺好。
問題
除了當我運行Artisan::call('migrate')
,它運行在以前的數據庫名稱(一個在.ENV重寫之前)。我嘗試了我找到的所有東西,但無法找出解決方案。
所以,現在有點我的代碼,simplifed的可讀性:
// Try connection with provided settings
$dbHost = $request->get('db_host');
$dbPort = $request->get('db_port');
$dbName = $request->get('db_name');
$dbUsername = $request->get('db_username');
$dbPassword = $request->get('db_password');
try {
$dbConnection = new \mysqli($dbHost,
$dbUsername,
$dbPassword,
'',
$dbPort
);
} catch (\Exception $e) {
return redirect()->back()
->withInput($request->all())
->withErrors(['general' => trans('wizard.errors.dbInit') . $e->getMessage()]);
}
// Create database
$sql = 'CREATE DATABASE ' . $dbName .
' CHARACTER SET utf8 COLLATE utf8_bin';
$queryResult = $dbConnection->query($sql);
// [...] Handling errors
$dbConnection->close();
// Writing .env file
// [...] Checking and replacing params, writing file, catching errors
// Executing artisan commands to create tables, and populate them with mandatory data
Artisan::call("config:clear");
// Setting the config to use the newly created database
Config::set('database.connections.mysql.database', $dbName);
// DB::select('USE ' . $dbName); // Throws : General error: 1 near "USE": syntax error (SQL: USE dbname)
Artisan::call('migrate');
Artisan::call('db:seed');
dd('STAHP'); // TODO debug
return redirect()->route('wizard.step2');
遷移和種子從.ENV文件來以前DB_DATABASE值一直在做。
我出的解決方案,我不知道什麼嘗試。
感謝您的幫助。