Проект, в котором я работаю, требует подключения к нескольким базам данных во время выполнения, я устанавливаю свойства соединения на лету, я делаю это следующим образом:
Я создаю помощников
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
if(! function_exists('conexionBD')){
/**
* Establish a tenant database connection.
*
* @param $hostname
* @param $username
* @param $password
* @param $database
*/
function conexionBD($hostname, $username, $password, $database){
DB::purge('empresa');
Config::set('database.connections.empresa.host', $hostname);
Config::set('database.connections.empresa.database', $database);
Config::set('database.connections.empresa.username', $username);
Config::set('database.connections.empresa.password', $password);
DB::reconnect('empresa');
Schema::connection('empresa')->getConnection()->reconnect();
}
}
Я создал Middleware под названием Tenant
public function handle($request, Closure $next) {
if (($request->session()->get('empresaId')) === null)
return redirect()->route('inicio')->withErrors(['error' => __('Por favor inicie sesión en alguna empresa antes de intentar esta acción')]);
$empresa = new empresa();
$empresa->connect();
return $next($request);
}
Моя модель empresa такая:
class empresa extends Model
{
protected $fillable = [
'hostname',
'username',
'password',
'database'
];
public function connect()
{
if (! $this->connected()) {
conexionBD(
$this->hostname,
$this->username,
$this->password,
$this->database
);
}
}
private function connected()
{
$connection = Config::get('database.connections.empresa');
return $connection['username'] == $this->username &&
$connection['password'] == $this->password &&
$connection['database'] == $this->database;
}
}
Теперь, когда я запускаю этот код, я получаю "SQLSTATE [HY000] [1045] Доступ запрещен для пользователя '' @ 'localhost' (используя пароль: НЕТ) ", в моей конфигурации базы данных база данных, имя пользователя, пароль и хост пустые.В моей базе данных, в таблице empresas, есть те поля с правильной информацией, но в момент изменения базы данных система сообщает мне об этом, и я не понимаю, почему, если у меня нет пользователя localhost и моей базы данныхимеет пароль
Кто-то знает, что мой код отсутствует или что я делаю неправильно, чтобы заставить мультитенантную систему работать правильно?