它过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值一直在做。
我出的解决方案,我不知道什么尝试。
感谢您的帮助。