Connexion de plusieurs bases de données avec Laravel
Pour gérer plusieurs bases de données au sein d'un système Laravel, Laravel propose une solution polyvalente grâce à sa façade de base de données.
Utilisation des connexions à la base de données
Lors de l'utilisation de plusieurs bases de données connexions, vous pouvez accéder à chaque connexion en utilisant la méthode de connexion sur la façade DB. Le nom fourni à la méthode de connexion correspond aux noms définis dans le fichier de configuration config/database.php :
$users = DB::connection('foo')->select(...);
Définition des connexions
Les connexions à la base de données peuvent être configuré à l'aide du fichier .env ou du fichier config/database.php :
À l'aide du .env fichier :
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
Utilisation du fichier 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'), ],
Schéma et migrations
Pour spécifier la connexion à utiliser pour le schéma et les migrations, utilisez la connexion() méthode :
Schema::connection('pgsql')->create('some_table', function ($table) { $table->increments('id'); });
Vous pouvez également définir une connexion en haut de la classe :
protected $connection = 'pgsql';
Query Builder
Pour utiliser le générateur de requêtes pour un objet spécifique connection:
$users = DB::connection('pgsql')->select(...);
Modèle
Dans Laravel 5.0 et versions ultérieures, vous pouvez définir la variable $connection dans votre modèle :
class ModelName extends Model { protected $connection = 'pgsql'; }
Éloquent
Dans Laravel 4.0 et versions antérieures, vous pouvez définir le Variable $connection dans votre modèle :
class SomeModel extends Eloquent { protected $connection = 'pgsql'; }
Mode de transaction
Pour gérer les transactions sur plusieurs bases de données :
DB::transaction(function () { DB::connection('mysql')->table('users')->update(['name' => 'John']); DB::connection('pgsql')->table('orders')->update(['status' => 'shipped']); });
ou
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; }
Gestion des connexions d'exécution
Vous pouvez également établissez des connexions au moment de l'exécution à l'aide de la méthode setConnection ou de la méthode on static :
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; } }
Attention
Lors de l'établissement de relations avec des tables de différentes bases de données, il est crucial de faire preuve de prudence en raison de mises en garde potentielles basées sur la base de données et les paramètres que vous utilisez.
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!