ItSolutionStuff.com

Laravel 9 Multiple Database Connections Example

By Hardik Savani • November 5, 2023
Laravel

Hi Dev,

Here, I will show you laravel 9 multiple database connections. This article will give you simple example of how to use multiple database connections in laravel 9. you will learn multiple database connection in laravel 9. Here you will learn laravel 9 multiple database connections .env.

I will give you step by step implementation of how to use laravel 9 multiple DB connections using the .env file. we will add a configuration variable on the .env file and use it in the database configuration file. You can just follow me, I will also learn how to work with migration, model and database queries for multiple database connections.

As we know sometimes we need to use multiple database connections like MySQL, MongoDB, etc. I can say when you work with a large number of projects then you will need maybe. So let's follow bellow steps.

Set ENV Variable:

Here, you need to set configuration variable on .env file. let's create as bellow:

.env

DB_CONNECTION=mysql

DB_HOST=127.0.0.1

DB_PORT=3306

DB_DATABASE=mydatabase

DB_USERNAME=root

DB_PASSWORD=root

DB_CONNECTION_SECOND=mysql

DB_HOST_SECOND=127.0.0.1

DB_PORT_SECOND=3306

DB_DATABASE_SECOND=mydatabase2

DB_USERNAME_SECOND=root

DB_PASSWORD_SECOND=root

Database Configuration:

Now, as we created variable in env file, we need to use that variable on config file so let's open database.php file and add new connections key as like bellow:

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'),

]) : [],

],

'mysql_second' => [

'driver' => 'mysql',

'url' => env('DATABASE_URL_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' => env('DB_SOCKET_SECOND', ''),

'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'),

]) : [],

],

.....

Getting Data from Multiple Database using DB:

I will give write two routes with getting products from different database connections. you can see simple example with DB.

let's add two routes in your file:

routes/web.php

<?php

use Illuminate\Support\Facades\Route;

/*

|--------------------------------------------------------------------------

| Web Routes

|--------------------------------------------------------------------------

|

| Here is where you can register web routes for your application. These

| routes are loaded by the RouteServiceProvider within a group which

| contains the "web" middleware group. Now create something great!

|

*/

/*------------------------------------------

--------------------------------------------

Getting Records of Mysql Database Connections

--------------------------------------------

--------------------------------------------*/

Route::get('/get-mysql-products', function () {

$products = DB::table("products")->get();

dd($products);

});

/*------------------------------------------

--------------------------------------------

Getting Records of Mysql Second Database Connections

--------------------------------------------

--------------------------------------------*/

Route::get('/get-mysql-second-products', function () {

$products = DB::connection('mysql_second')->table("products")->get();

dd($products);

});

Multiple Database Connections with Migration:

you can create separate migrations for multiple database connections:

Default:

<?php

.....

public function up()

{

Schema::create('blog', function (Blueprint $table) {

$table->increments('id');

$table->string('title');

$table->string('body')->nullable();

$table->timestamps();

});

}

.....

Second Database:

<?php

.....

public function up()

{

Schema::connection('mysql_second')->create('blog', function (Blueprint $table) {

$table->increments('id');

$table->string('title');

$table->string('body')->nullable();

$table->timestamps();

});

}

.....

Multiple Database Connections with Model:

Default:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Database\Eloquent\Model;

class Product extends Model

{

use HasFactory;

protected $fillable = [

'name', 'detail'

];

}

Second Database:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Database\Eloquent\Model;

class Product extends Model

{

use HasFactory;

protected $connection = 'mysql_second';

protected $fillable = [

'name', 'detail'

];

}

Multiple Database Connections in Controller:

Default:

<?php

use App\Models\Product;

class ProductController extends BaseController

{

/**

* Write code on Method

*

* @return response()

*/

public function getRecord()

{

$products = Product::get();

return $products;

}

}

Second Database:

<?php

use App\Models\Product;

class ProductController extends BaseController

{

/**

* Write code on Method

*

* @return response()

*/

public function getRecord()

{

$product = new Product;

$product->setConnection('mysql_second');

$something = $product->find(1);

return $something;

}

}

I hope it can help you...

Hardik Savani

Hardik Savani

I'm a full-stack developer, entrepreneur, and founder of ItSolutionStuff.com. Passionate about PHP, Laravel, JavaScript, and helping developers grow.

📺 Subscribe on YouTube

We Are Recommending You

Laravel 9 Socialite Login with Twitter Account Example

Read Now →

Laravel 9 Generate Test or Dummy Data using Factory Tinker

Read Now →

Laravel 9 Socialite Login with Facebook Account Example

Read Now →

Laravel 9 Socialite Login with Google Account Example

Read Now →

Laravel 9 Get Current Logged in User Data Example

Read Now →

Laravel 9 Resize Image Before Upload Example

Read Now →

Laravel 9 Pagination Example Tutorial

Read Now →

Laravel 9 Multi Auth: Create Multiple Authentication in Laravel

Read Now →

Laravel 9 REST API with Passport Authentication Tutorial

Read Now →

Laravel 9 Drag and Drop File Upload with Dropzone JS

Read Now →

Laravel 9 Autocomplete Search with Select2 JS Example

Read Now →