Laravel'de, Model içinde $connection değişkeni ile farklı bir sunucuda olan veritabanındaki bir tablo ile bağlantı kurabilir, ilişkisel sorgular gerçelleştirebilirsiniz, aynı makinedeki tablolar gibi çalışacaktır.
config/database.php içeriği:
'mysql' => [
'driver' => 'mysql',
'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' => '',
'strict' => true,
'engine' => null,
],
'mysql2' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE2', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
.env bağlantı bilgileri:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laramultidb
DB_USERNAME=yourusername
DB_PASSWORD=secret
DB_DATABASE2=laramultidb2
DB_HOST_SQLSRV=127.0.0.1
DB_PORT_SQLSRV=1433
DB_DATABASE_SQLSRV=laravelmultidb
DB_USERNAME_SQLSRV=sa
DB_PASSWORD_SQLSRV=secret
Örnek Type Model:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Type extends Model
{
protected $connection = 'mysql2';
public function posts()
{
return $this->hasMany(Post::class, 'type_code', 'code');
}
public function mails()
{
return $this->hasMany(Mail::class, 'type_code', 'code');
}
}
Örnek Mail Model:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Mail extends Model
{
protected $connection = 'sqlsrv';
protected $dateFormat = 'Y-m-d H:i:s';
public function type()
{
return $this->belongsTo(Type::class, 'type_code', 'code');
}
}
Bu sayede
$types = \App\Type::with(['posts', 'mails'])->get();
sorgusunu aynı veritabanındaymış gibi çalıştırabilirsiniz.
Kaynak:
https://medium.com/teknomuslim/how-to-run-laravel-using-multiple-database-connections-d7e8dcb7ed2a