In this article, we will see laravel 8 multiple database connections. Today I will give you the step-by-step implementation of how to use laravel 8 multiple database connections. Many times we have requirements in our project to use multiple database connections like MySQL, MongoDB, PostgreSQL, etc. When you work with a very large amount of projects then you will need to manage multiple database connections.
So, in this tutorial, we will see one or more database connections in a single laravel application, multiple database connections in laravel 8, how to connect multiple databases in laravel 8, laravel multiple database servers, laravel multiple database connections.
Set configuration in .env file like the below code.
// Database 1
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_1
DB_USERNAME=root
DB_PASSWORD=
// Database 2
DB_CONNECTION_SECOND=mysql
DB_HOST_SECOND=127.0.0.1
DB_PORT_SECOND=3306
DB_DATABASE_SECOND=database_2
DB_USERNAME_SECOND=root
DB_PASSWORD_SECOND=
Now, as we created a variable in the .env file we need to use that variable on the config file. So, let's open the database.php file and add new connections key as the below:
config/database.php
<?php
use Illuminate\Support\Str;
return [
'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [
.....
'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'),
]) : [],
],
'mysql2' => [
'driver' => env('DB_CONNECTION_SECOND'),
'host' => env('DB_HOST_SECOND', '127.0.0.1'),
'port' => env('DB_PORT_SECOND', '3306'),
'database' => env('DB_DATABASE_SECOND', 'forge'),
'username' => env('DB_USERNAME_SECOND', 'forge'),
'password' => env('DB_PASSWORD_SECOND', ''),
'unix_socket' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
],
.....
Here, I will give you a simple example of how to use multiple connections with migration.
Default Database
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email');
$table->timestamps();
});
}
Second Database
public function up()
{
Schema::connection('mysql2')->create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email');
$table->timestamps();
});
}
In this step, we will see a multi-database with the model.
Default
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Users extends Model
{
....
}
Second
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Users extends Model
{
protected $connection = 'mysql2';
...
}
Default
class UsersController extends BaseController
{
public function getRecord()
{
$users = new Users;
$find = $users->find(1);
return $find;
}
}
Second
class UsersController extends BaseController
{
public function getRecord()
{
$users = new Users;
$users->setConnection('mysql2');
$find = $users->find(1);
return $find;
}
}
Default
$users = DB::table("users")->get();
print_r($users);
Second
$users = DB::connection('mysql2')->table("users")->get();
print_r($users);
You might also like :