Maison >base de données >tutoriel mysql >Comment puis-je utiliser plusieurs bases de données dans Laravel ?
Utilisation de plusieurs bases de données dans Laravel
La polyvalence de Laravel s'étend à la gestion simultanée de plusieurs bases de données. Suivez ces étapes pour y parvenir :
Définition des connexions
Utilisez .env >= 5.0 :
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
Dans 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'), ],
Sans .env <= 4.0 :
Dans app/config/database.php :
return array( 'default' => 'mysql', 'connections' => array( # Primary/Default database connection 'mysql' => array( 'driver' => 'mysql', 'host' => '127.0.0.1', 'database' => 'mysql_database', 'username' => 'root', 'password' => 'secret' 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ), # Secondary database connection 'pgsql' => [ 'driver' => 'pgsql', 'host' => 'localhost', 'port' => '5432', 'database' => 'pgsql_database', 'username' => 'root', 'password' => 'secret', 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', ] ), );</p> <p><strong>Schéma / Migration</strong></p> <p>Spécifiez la connexion à l'aide de la méthode connection() :</p> <pre class="brush:php;toolbar:false">Schema::connection('pgsql')->create('some_table', function($table) { $table->increments('id'): });
Ou, définir une connexion au haut :
protected $connection = 'pgsql';
Query Builder
$users = DB::connection('pgsql')->select(...);
Modèle
(Laravel >= 5.0)
Définissez la variable $connection dans votre modèle :
class ModelName extends Model { // extend changed protected $connection = 'pgsql'; }
(Laravel <= 4.0)
class SomeModel extends Eloquent { protected $connection = 'pgsql'; }
Éloquent
Mode de transaction
DB::transaction(function () { DB::connection('mysql')->table('users')->update(['name' => 'John']); DB::connection('pgsql')->table('orders')->update(['status' => 'shipped']); });</p> <p>ou</p> <pre class="brush:php;toolbar:false">DB::connection('mysql')->beginTransaction(); try { DB::connection('mysql')->table('users')->update(['name' => 'John']); DB::connection('pgsql')->beginTransaction(); DB::connection('pgsql')->table('orders')->update(['status' => 'shipped']); DB::connection('pgsql')->commit(); DB::connection('mysql')->commit(); } catch (\Exception $e) { DB::connection('mysql')->rollBack(); DB::connection('pgsql')->rollBack(); throw $e; }
Vous peut également spécifier la connexion au moment de l'exécution :
class SomeController extends BaseController { public function someMethod() { $someModel = new SomeModel; $someModel->setConnection('pgsql'); // non-static method $something = $someModel->find(1); $something = SomeModel::on('pgsql')->find(1); // static method return $something; } }
Considérations sur les relations
L'établissement de relations entre des bases de données est possible mais nécessite une manipulation minutieuse. Il repose sur la base de données spécifique et les paramètres utilisés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!