Home >Database >Mysql Tutorial >How to Effectively Manage Multiple Databases in Laravel?
Utilizing Multiple Databases in Laravel
Managing multiple databases within a system is a common requirement in many applications. Laravel handles this scenario effectively through its database facade.
Utilizing the Database Facade
The DB facade provides a connection method that allows you to access various connections defined in the config/database.php configuration file. To access a specific connection, use the following syntax:
$users = DB::connection('foo')->select(...);
Defining Connections
In Laravel versions 5.0 and later, connections are defined in the .env file or config/database.php.
.env (Laravel 5.0 and later)
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=mysql_database DB_USERNAME=root DB_PASSWORD=secret DB_CONNECTION_PGSQL=pgsql DB_HOST_PGSQL=127.0.0.1 DB_PORT_PGSQL=5432 DB_DATABASE_PGSQL=pgsql_database DB_USERNAME_PGSQL=root DB_PASSWORD_PGSQL=secret
config/database.php
'mysql' => [ 'driver' => env('DB_CONNECTION'), 'host' => env('DB_HOST'), 'port' => env('DB_PORT'), 'database' => env('DB_DATABASE'), 'username' => env('DB_USERNAME'), 'password' => env('DB_PASSWORD'), ], 'pgsql' => [ 'driver' => env('DB_CONNECTION_PGSQL'), 'host' => env('DB_HOST_PGSQL'), 'port' => env('DB_PORT_PGSQL'), 'database' => env('DB_DATABASE_PGSQL'), 'username' => env('DB_USERNAME_PGSQL'), 'password' => env('DB_PASSWORD_PGSQL'), ],
Schema and Migration
Call the connection() method to specify the connection for schema or migration operations:
Schema::connection('pgsql')->create('some_table', function($table) { $table->increments('id'); });
Query Builder
Similar to schema operations, use the connection() method for queries:
$users = DB::connection('pgsql')->select(...);
Models
Define the connection for a model in its class:
Laravel 5.0 and later:
class ModelName extends Model { protected $connection = 'pgsql'; }
Laravel 4.0 and earlier:
class SomeModel extends Eloquent { protected $connection = 'pgsql'; }
Transactions
Transactions can be performed across multiple connections using the following syntax:
DB::transaction(function () { DB::connection('mysql')->table('users')->update(['name' => 'John']); DB::connection('pgsql')->table('orders')->update(['status' => 'shipped']); });
Conclusion
Laravel provides robust support for working with multiple databases through the DB facade and other methods. This empowers developers to cater to applications that require seamless data management across heterogeneous database systems.
The above is the detailed content of How to Effectively Manage Multiple Databases in Laravel?. For more information, please follow other related articles on the PHP Chinese website!