我正在尝试为我的应有项目编写一个简单的向导安装2天,而且我现在对一个我无法解决的问题感到疯狂。
需要
我正在开发一个sorta向导。此向导会询问常用的数据库设置:主机,端口,用户名,密码和数据库名称
我被要求创建一个名称来自表单的数据库,并使用常规文件中定义的迁移和种子填充它。
我不能使用RachidLaasri github项目,因为规格不能接受它。
什么有用
到目前为止,我设法使用低级连接(使用new \ mysqli)创建数据库。这一步是必要的,因为我们需要测试连接的每一步以返回适当的错误消息
然后,我用参数验证的纠正重写.env,包括数据库名称。到现在为止还挺好。
问题
除了当我运行Artisan::call('migrate')
时,它运行在先前的数据库名称(重写它之前的.env中的名称)。我尝试了所有我找到的东西,但无法找到解决方案
所以,现在我的一些代码,简化了可读性:
// 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 :(得分:0)
当laravel启动时,它会将.env
和所有config/
个文件加载到内存中,写入任何一个文件都不会影响任何正在运行的laravel进程。