Laravel 10 Multiple Database Connections Tutorial
Mar 20, 2023 . Admin
Hi dev,
This simple article demonstrates of laravel 10 multiple database connections. I would like to show you how to use multiple database connections in laravel 10. you can see multiple database connection in laravel 10. I would like to share with you laravel 10 multiple database connections .env.
I'll walk you through utilising Laravel 10 with multiple Database connections using the.env file step by step. On the.env file, a configuration variable will be added, and the database configuration file will use it. Simply follow along as I gain experience with migration, models, and database queries for various 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:
.envDB_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=rootDatabase 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(): void { Schema::create('blog', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->string('body')->nullable(); $table->timestamps(); }); } .....Second Database:
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...