bu işlemi şu şekilde hallettim.
aynı anda iki tane veritabanı bağlantısı oluşturuluyor.
1 - config/database.php dosyasında ikinci bir bağlantı tanımladım.
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
'userdb' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => 'localhost',
'port' =>'3306',
'database' => '',
'username' => 'root',
'password' => '',
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
daha sonra bir midlleware oluşturdum ve rota gruplarına ekledim.
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Config;
class DynamicDbConnection
{
public function handle($request, Closure $next)
{
if(Auth::check()){
$user = Auth::user();
$db_name = $user->il_id;
$connection_name = 'userdb';
Config::set('database.connections.'.$connection_name, array(
'host' => 'localhost',
'driver' => 'mysql',
'port' => '3306',
'database' => 'hekemgoz_db_'.$db_name,
'username' => 'root',
'password' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
));
return $next($request);
}else{
return redirect('/');
}
}
}
model classlarında ise modelin hangi bağlantıyı gerçekleştireceğini belirttim.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Iller extends Model
{
protected $connection = "mysql";
public $table = 'iller';
public $guarded = ['id'];
public $timestamps = false;
public function ilceler(){
return $this->hasMany(Ilceler::class, 'il_id', 'id');
}
}
şimdilik aynı anda iki tane vertabanına bağlantı sağlayabiliyorum.
burada anormal veya mantıksız bir durum var mıdır?