2017-09-08 143 views
0

它過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值一直在做。
我出的解決方案,我不知道什麼嘗試。
感謝您的幫助。

回答

0

當laravel啓動時,它將.env和所有config/文件加載到內存中,寫入任何一個都不會影響任何正在運行的laravel進程。