The project were I'm working needs connect with multiple databases on runtime to this, I'm setting the connection propertie on the fly, I'm doing this as follows:
I create a helpers
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();
}
}
I created a Middleware called 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);
}
My model of empresa is like that
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;
}
}
Now, when I run this code, I get "SQLSTATE[HY000] [1045] Access denied for user ''@'localhost' (using password: NO)" error, in my database config I have the database, username, password and host empty. In my database, in the empresas table I have that fields with correct information, but at the moment of change the database, the system tell me that, and I don't understand why if I'm not have a localhost user and my database has a password
Someone knows that my code is missing or that I am doing wrong to make the multi-tenant system work correctly?
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire