Recherche…
Connexions de bases de données multiples
Laravel permet aux utilisateurs de travailler sur plusieurs connexions de bases de données. Si vous devez vous connecter à plusieurs bases de données et les faire fonctionner ensemble, vous devez faire attention à la configuration de la connexion.
Vous pouvez également utiliser différents types de bases de données dans la même application si vous en avez besoin.
Connexion par défaut Dans config/database.php
, vous pouvez voir l'appel de l'élément de configuration:
'default' => env('DB_CONNECTION', 'mysql'),
Ce nom fait référence au nom des connexions mysql
ci-dessous:
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => database_path('database.sqlite'),
'prefix' => '',
],
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
],
Si vous n'avez pas mentionné le nom de la connexion à la base de données dans d'autres codes ou commandes, Laravel choisira le nom de connexion de base de données par défaut. cependant, dans les connexions à plusieurs bases de données, même si vous configurez la connexion par défaut, vous avez une meilleure configuration partout où vous avez utilisé la connexion à la base de données.
Fichier de migration
Dans le fichier de migration, si une connexion à une base de données unique, vous pouvez utiliser:
Schema::create("table",function(Blueprint $table){
$table->increments('id');
});
En connexion à plusieurs bases de données, vous utiliserez la méthode connection()
pour indiquer à Laravel quelle connexion de base de données vous utilisez:
Schema::connection("sqlite")->create("table",function(Blueprint $table){
$table->increments('id');
});
Artisan Migrate
Si vous utilisez une connexion à une seule base de données, vous exécuterez:
php artisan migrate
Toutefois, pour une connexion à plusieurs bases de données, il est préférable de savoir quelle connexion de base de données conserve les données de migration. vous exécuterez donc la commande suivante:
php artisan migrate:install --database=sqlite
Cette commande installe la table de migration dans la base de données cible pour préparer la migration.
php artisan migrate --database=sqlite
Cette commande exécute la migration et enregistre les données de migration dans la base de données cible
php artisan migrate:rollback --database=sqlite
Cette commande annulera la migration et enregistrera les données de migration dans la base de données cible.
Modèle éloquent
Pour spécifier une connexion à une base de données à l'aide d'Eloquent, vous devez définir la propriété $connection
:
namespace App\Model\Sqlite;
class Table extends Model
{
protected $table="table";
protected $connection = 'sqlite';
}
Pour spécifier une autre connexion (seconde) à la base de données en utilisant Eloquent:
namespace App\Model\MySql;
class Table extends Model
{
protected $table="table";
protected $connection = 'mysql';
}
Laravel utilisera la propriété $connection
définie dans un modèle pour utiliser la connexion spécifiée définie dans config/database.php
. Si la propriété $connection
n'est pas définie dans un modèle, la valeur par défaut sera utilisée.
Vous pouvez également spécifier une autre connexion en utilisant la méthode statique on
:
// Using the sqlite connection
Table::on('sqlite')->select(...)->get()
// Using the mysql connection
Table::on('mysql')->select(...)->get()
Base de données / Générateur de requêtes
Vous pouvez également spécifier une autre connexion en utilisant le générateur de requêtes:
// Using the sqlite connection
DB::connection('sqlite')->table('table')->select(...)->get()
// Using the mysql connection
DB::connection('mysql')->table('table')->select(...)->get()
Test de l'unité
Laravel fournit seeInDatabase($table,$fielsArray,$connection)
pour tester le code de connexion à la base de données. Dans le fichier de test unitaire, vous devez faire comme:
$this
->json(
'GET',
'result1/2015-05-08/2015-08-08/a/123'
)
->seeInDatabase("log", ["field"=>"value"], 'sqlite');
De cette façon, Laravel saura quelle connexion de base de données tester.
Transactions de base de données dans le test unitaire
Laravel autorise la base de données à annuler toutes les modifications pendant les tests. Pour tester plusieurs connexions de base de données, vous devez définir $connectionsToTransact
propriétés $connectionsToTransact
use Illuminate\Foundation\Testing\DatabaseMigrations;
class ExampleTest extends TestCase
{
use DatabaseTransactions;
$connectionsToTransact =["mysql","sqlite"] //tell Laravel which database need to rollBack
public function testExampleIndex()
{
$this->visit('/action/parameter')
->see('items');
}
}