Dans .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database1
DB_USERNAME=root
DB_PASSWORD=secret
DB_CONNECTION_SECOND=mysql
DB_HOST_SECOND=127.0.0.1
DB_PORT_SECOND=3306
DB_DATABASE_SECOND=database2
DB_USERNAME_SECOND=root
DB_PASSWORD_SECOND=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'),
],
'mysql2' => [
'driver' => env('DB_CONNECTION_SECOND'),
'host' => env('DB_HOST_SECOND'),
'port' => env('DB_PORT_SECOND'),
'database' => env('DB_DATABASE_SECOND'),
'username' => env('DB_USERNAME_SECOND'),
'password' => env('DB_PASSWORD_SECOND'),
],
Remarque: Dans le mysql2
cas DB_username et DB_PASSWORD est la même, vous pouvez utiliser env('DB_USERNAME')
qui est metioned en .env
premières lignes.
Définir les connexions
app/config/database.php
return array(
'default' => 'mysql',
'connections' => array(
# Primary/Default database connection
'mysql' => array(
'driver' => 'mysql',
'host' => '127.0.0.1',
'database' => 'database1',
'username' => 'root',
'password' => 'secret'
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
# Secondary database connection
'mysql2' => array(
'driver' => 'mysql',
'host' => '127.0.0.1',
'database' => 'database2',
'username' => 'root',
'password' => 'secret'
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
),
);
Schéma
Pour spécifier la connexion à utiliser, exécutez simplement la connection()
méthode
Schema::connection('mysql2')->create('some_table', function($table)
{
$table->increments('id'):
});
Générateur de requêtes
$users = DB::connection('mysql2')->select(...);
Éloquent
Définissez la $connection
variable dans votre modèle
class SomeModel extends Eloquent {
protected $connection = 'mysql2';
}
Vous pouvez également définir la connexion lors de l'exécution via la setConnection
méthode ou la on
méthode statique:
class SomeController extends BaseController {
public function someMethod()
{
$someModel = new SomeModel;
$someModel->setConnection('mysql2'); // non-static method
$something = $someModel->find(1);
$something = SomeModel::on('mysql2')->find(1); // static method
return $something;
}
}
Remarque Soyez prudent lorsque vous tentez de créer des relations avec des tables dans des bases de données! Il est possible de le faire, mais il peut être assorti de certaines mises en garde et dépend de la base de données et / ou des paramètres de base de données dont vous disposez.
Utilisation de plusieurs connexions à la base de données
Lorsque vous utilisez plusieurs connexions, vous pouvez accéder à chacune connection
via la méthode de connexion sur la DB
façade. Le name
passé à la connection
méthode doit correspondre à l'une des connexions répertoriées dans votre config/database.php
fichier de configuration:
$users = DB::connection('foo')->select(...);
Vous pouvez également accéder à l'instance PDO brute sous-jacente à l'aide de la méthode getPdo sur une instance de connexion:
$pdo = DB::connection()->getPdo();
Liens utiles
- Connexion à plusieurs bases de données Laravel 5
laracasts.com
- Connectez plusieurs bases de données dans laravel FROM
tutsnare.com
- Connexions DB multiples dans Laravel
fideloper.com
class SomeModel extends Model {
et également vous assurer que vous avez supprimé les valeurs get du fichier env commeenv('DB_DATABASE', 'name')
lorsque vous créez un nouveau tableau de configuration DB dans le fichier database.php comme @sba l'a mentionnéDans Laravel 5.1, vous spécifiez la connexion:
Par défaut, Laravel utilise la connexion par défaut. C'est simple, non?
En savoir plus ici: http://laravel.com/docs/5.1/database#accessing-connections
la source
En fait,
DB::connection('name')->select(..)
ça ne marche pas pour moi, car 'nom' doit être entre guillemets: "nom"Pourtant, la requête de sélection est exécutée sur ma connexion par défaut. Toujours en train de comprendre comment convaincre Laravel de fonctionner comme prévu: changez la connexion.
Edit: je l'ai compris. Après avoir débogué Laravels DatabaseManager, il s'est avéré que mon database.php (fichier de configuration) (dans $ this-> app) était incorrect. Dans la section "connexions", j'avais des trucs comme "base de données" avec les valeurs de celle à partir de laquelle je les ai copiés. En termes clairs, au lieu de
Je devais placer quelque chose comme
car toutes les connexions ont été répertoriées avec les mêmes valeurs pour la base de données, le nom d'utilisateur, le mot de passe, etc., ce qui n'a bien sûr aucun sens si je veux accéder à au moins un autre nom de base de données
Par conséquent, chaque fois que je voulais sélectionner quelque chose dans une autre base de données, je me retrouvais toujours dans ma base de données par défaut
la source
Laravel a un support intégré pour plusieurs systèmes de base de données, vous devez fournir les détails de connexion dans le fichier config / database.php
Une fois que vous avez cela, vous pouvez créer deux classes de modèle de base pour chaque connexion et définir le nom de la connexion dans ces modèles
Vous pouvez étendre ces modèles pour créer plus de modèles de tables dans chaque base de données.
la source