Laravel How to Connect Multiple Databases Simultaneously

  • 2021-12-13 16:37:10
  • OfStack

Preface

In the article above, we talked about thinkphp 3.2 connecting two databases at the same time, and then summarized laravel connecting at the same time

Multiple database instances for novice learning, db connection and model connection.

Configure the. env file


DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=root
DB_PASSWORD=root

DB_HOST_TEST=127.0.0.1
DB_PORT_TEST=3306
DB_DATABASE_TEST=database_test
DB_USERNAME_TEST=root
DB_PASSWORD_TEST=root

Configuring config/database. php


//  Default connection mysql
'default' => env('DB_CONNECTION', 'mysql'),

'connections' => [

 'sqlite' => [
  'driver' => 'sqlite',
  'database' => database_path('database.sqlite'),
  'prefix' => '',
 ],

 'mysql' => [
  'driver' => 'mysql',
  'host' => env('DB_HOST', '127.0.0.1'),
  'port' => env('DB_PORT', '3306'),
  'database' => env('DB_DATABASE', 'database_name'),
  'username' => env('DB_USERNAME', 'root'),
  'password' => env('DB_PASSWORD', 'root'),
  'charset' => 'utf8',
  'collation' => 'utf8_unicode_ci',
  'prefix' => '',
  'strict' => false,
 ],

 'mysql_test' => [
  'driver' => 'mysql',
  'host' => env('DB_HOST_TEST', '127.0.0.1'),
  'port' => env('DB_PORT_TEST', '3306'),
  'database' => env('DB_DATABASE_TEST', 'database_test'),
  'username' => env('DB_USERNAME_TEST', 'root'),
  'password' => env('DB_PASSWORD_TEST', 'root'),
  'charset' => 'utf8',
  'collation' => 'utf8_unicode_ci',
  'prefix' => '',
  'strict' => false,
 ],

 ],

model instance (this model will use mysql_test connection)


<?php

namespace App\Model;

use Illuminate\Database\Eloquent\Model;

class Test extends Model
{
 //  Database 'database_test' In test Table 
 public $table = 'test';
 public $timestamps = false;
 protected $connection = 'mysql_test';

}

model instance (this model will use the default 'mysql' connection)


<?php

namespace App\Model;

use Illuminate\Database\Eloquent\Model;

class Test extends Model
{
 //  Database 'database' In test Table 
 public $table = 'test';
 public $timestamps = false;
 //  The following code can be used or not, and the default connection mysql
 protected $connection = 'mysql';

}


a , this model The default 'mysql' Connect 
class UserModel extends Model
{
 //  Database 'database' In users Table 
 protected $table = "users";
}

b ,  

Calling an model instance


//  Here's how to call the method 
Test::get();
Test::where('id',1)->first();

DB Direct Connection to Database


//  Connect mysql_test Library 
DB::connection('mysql_test')->table('test')->where('id',1)->first();
//  Connect mysql Library 
DB::connection('mysq')->table('test')->where('id',1)->first();
//  Connect mysql Library 
DB::table('test')->where('id',1)->first();

Summarize


Related articles: