Maison  >  Questions et réponses  >  le corps du texte

Comment utiliser plusieurs bases de données dans Laravel

Je souhaite combiner plusieurs bases de données dans mon système. La plupart du temps, la base de données est MySQL ; mais cela pourrait être différent à l'avenir, c'est-à-dire que l'administrateur peut générer des rapports comme celui-ci, d'où l'origine de l'utilisation de systèmes de bases de données hétérogènes. Ma question est donc la suivante : Laravel fournit-il une façade

pour gérer cette situation ? Ou existe-t-il un autre framework doté de fonctionnalités mieux adaptées au problème ?

P粉919464207P粉919464207393 Il y a quelques jours624

répondre à tous(2)je répondrai

  • P粉957661544

    P粉9576615442023-10-14 00:28:20

    Dans Laravel 5.1, vous précisez la connexion :

    $users = DB::connection('foo')->select(...);

    Par défaut, Laravel utilise la connexion par défaut. Assez simple, n'est-ce pas ?

    Lire la suite ici : http://laravel.com/docs/5.1/database#visit connection

    répondre
    0
  • P粉340264283

    P粉3402642832023-10-14 00:26:49

    De la documentation Laravel  : Vous pouvez accéder à chaque connexion lors de l'utilisation de plusieurs connexions via DB 外观上的连接方法。传递给连接方法的名称应与 config/database.php correspondant à l'une des connexions répertoriées dans le fichier de configuration :

    $users = DB::connection('foo')->select(...);

    Définir les connexions

    Utilisez .env >= 5.0 (ou supérieur)

    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

    Utilisez 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'),
    ],

    Non .env <= 4.0 (ou inférieur)<= 4.0(或更低)

    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',
            ]
        ),
    );

    Architecture/Migration

    Exécutez la méthode connection() pour spécifier la connexion à utiliser.

    Schema::connection('pgsql')->create('some_table', function($table)
    {
        $table->increments('id'):
    });

    Vous pouvez également définir une connexion en haut.

    protected $connection = 'pgsql';

    Générateur de requêtes

    $users = DB::connection('pgsql')->select(...);

    Modèle

    (dans Laravel >= 5.0 (ou supérieur))

    Définissez les $connectionvariables

    dans le modèle
    class ModelName extends Model { // extend changed
    
        protected $connection = 'pgsql';
    
    }

    éloquent

    (dans Laravel <= 4.0 (ou inférieur)) <= 4.0(或更低)中)

    Définissez les $connectionvariables

    dans le modèle
    class SomeModel extends Eloquent {
        protected $connection = 'pgsql';
    }

    Mode de trading

    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;
    }

    Vous pouvez également définir des connexions au moment de l'exécution via setConnection 方法或 on méthodes statiques :

    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;
        }
    }

    Version bêta (mise à jour)

    Version Testé (O/N)
    4.2 Non
    5 Oui (5.5)
    6 Non
    7 Non
    8 Oui (8.4)
    9 Oui (9.2)

    répondre
    0
  • Annulerrépondre