Maison > développement back-end > tutoriel php > Comment puis-je gérer plusieurs connexions à des bases de données dans Laravel ?

Comment puis-je gérer plusieurs connexions à des bases de données dans Laravel ?

Patricia Arquette
Libérer: 2024-12-23 02:45:30
original
177 Les gens l'ont consulté

How Can I Manage Multiple Database Connections in Laravel?

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(...);
Copier après la connexion

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
Copier après la connexion

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'),
],
Copier après la connexion

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');
});
Copier après la connexion

Vous pouvez également définir une connexion en haut de la classe :

protected $connection = 'pgsql';
Copier après la connexion

Query Builder

Pour utiliser le générateur de requêtes pour un objet spécifique connection:

$users = DB::connection('pgsql')->select(...);
Copier après la connexion

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';
}
Copier après la connexion

É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';
}
Copier après la connexion

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']);
});
Copier après la connexion

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;
}
Copier après la connexion

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;
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal