我希望在用户登录后更改数据库连接的运行时间。我使用Config Facade的方法集。我知道我只能在Middleware或Controller构造函数上使用它。所以我创建了这些
Route::get("login", "Login_Controller@login");
Route::group(["middleware" => "test"], function() {
Route::post("login", "Login_Controller@login");
});
然后我创建了"测试"登录后提交的中间件提交:
public function handle($request, Closure $next) {
// Validazione dei dati
$validator = Validator::make($request->all(), [
"codice_azienda" => "required",
"username" => "required",
"password" => "required"
]);
if ($validator->fails()) {
return redirect()->back()->withInput()->withErrors($validator);
}
// Verifico i dati immessi
$codice_azienda = $request->get("codice_azienda");
$username = $request->get("username");
$password = $request->get("password");
$objOperatore = new Operatore();
$cliente = $objOperatore->loginOperatore($codice_azienda, $username, $password);
if (empty($cliente)) {
throw new \App\Exceptions\LoginFailedException;
}
Config::set("DB_HOST", Crypt::decrypt($cliente->Server));
Config::set("DB_DATABASE", $cliente->NomeDB);
Config::set("DB_USERNAME", Crypt::decrypt($cliente->Username));
Config::set("DB_PASSWORD", Crypt::decrypt($cliente->Password));
$operatori = Operatore_Model::all();
\App\Http\Controllers\Log_Controller::debug($operatori, true);
return $next($request);
}
但是Operatore_Model的metoed all()并没有返回任何内容
日志返回此错误:
" [2017-02-16 16:44:52] local.ERROR:exception' PDOException'同 消息' SQLSTATE [42S02]:[Microsoft] [用于SQL的ODBC驱动程序11 服务器] [SQL Server]无效的对象名称'运营商'。'在 C:\ XAMPP \ htdocs中\仪表板\ WWW \ E730 \厂商\ laravel \框架\ SRC \照亮\数据库\ Connection.php:323"
我想使用多DB连接,每个客户一个。
答案 0 :(得分:1)
我以这种方式解决了:
config :: set的部分是错误的,要访问数据库配置,我应该使用点(。)样式,这样:
Config::set("database.connections.sqlsrv.host", Crypt::decrypt($cliente->Server));
Config::set("database.connections.sqlsrv.database", $cliente->NomeDB);
Config::set("database.connections.sqlsrv.username", Crypt::decrypt($cliente->Username));
Config::set("database.connections.sqlsrv.password", Crypt::decrypt($cliente->Password));
然后重新连接到DB:
\Illuminate\Support\Facades\DB::reconnect();
我对所有遇到此问题的建议是使用双数据库连接,一个用于主数据库(服务器数据库),另一个用于客户数据库。通过这种方式,您可以使用以下简单代码切换到db:
Config::set("database.default", "sqlsrvCustomer");
\Illuminate\Support\Facades\DB::reconnect();
使用第一个命令,您可以选择客户数据库,第二个命令可以连接到客户数据库。
答案 1 :(得分:0)
可能您只需要使用新凭据添加新数据库或克隆现有对象并使用它。您可以编写一些包装器:
{{1}}