Maison >base de données >tutoriel mysql >Comment puis-je utiliser plusieurs bases de données dans Laravel ?

Comment puis-je utiliser plusieurs bases de données dans Laravel ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-21 20:10:56468parcourir

How Can I Use Multiple Databases in 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!

Déclaration:
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