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é