Comment utiliser plusieurs bases de données dans Laravel
P粉919464207
P粉919464207 2023-10-13 09:54:58
0
2
652

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粉919464207
P粉919464207

répondre à tous(2)
P粉957661544

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

P粉340264283

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

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

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)
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal