Suche…
Mehrere Datenbankverbindungen
Mit Laravel können Benutzer an mehreren Datenbankverbindungen arbeiten. Wenn Sie eine Verbindung zu mehreren Datenbanken herstellen und diese zusammenarbeiten müssen, achten Sie auf den Verbindungsaufbau.
Sie erlauben auch die Verwendung verschiedener Datenbanktypen in derselben Anwendung, wenn Sie dies benötigen.
Standardverbindung In config/database.php
können Sie den Aufruf des Konfigurationselements sehen:
'default' => env('DB_CONNECTION', 'mysql'),
Dieser Name verweist auf den Namen mysql
der Verbindungen:
'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,
],
],
Wenn Sie den Namen der Datenbankverbindung nicht in anderen Codes oder Befehlen angegeben haben, wird Laravel den Standardnamen der Datenbankverbindung ermitteln. Bei mehreren Datenbankverbindungen können Sie jedoch selbst bei der Einrichtung der Standardverbindung besser festlegen, welche Datenbankverbindung Sie verwendet haben.
Migrationsdatei
In einer Migrationsdatei können Sie bei einer einzelnen Datenbankverbindung Folgendes verwenden:
Schema::create("table",function(Blueprint $table){
$table->increments('id');
});
In einer Datenbankverbindung verwenden Sie die Methode connection()
, um Laravel mitzuteilen, welche Datenbankverbindung Sie verwenden:
Schema::connection("sqlite")->create("table",function(Blueprint $table){
$table->increments('id');
});
Handwerker migrieren
Wenn Sie eine einzige Datenbankverbindung verwenden, führen Sie Folgendes aus:
php artisan migrate
Bei einer Verbindung mit mehreren Datenbanken sollten Sie jedoch besser wissen, welche Datenbankverbindung die Migrationsdaten verwaltet. So führen Sie den folgenden Befehl aus:
php artisan migrate:install --database=sqlite
Dieser Befehl installiert die Migrationstabelle in der Zieldatenbank, um die Migration vorzubereiten.
php artisan migrate --database=sqlite
Dieser Befehl führt die Migration aus und speichert die Migrationsdaten in der Zieldatenbank
php artisan migrate:rollback --database=sqlite
Dieser Befehl führt die Migration zurück und speichert die Migrationsdaten in der Zieldatenbank
Eloquentes Modell
Um eine Datenbankverbindung mit Eloquent anzugeben, müssen Sie die $connection
-Eigenschaft definieren:
namespace App\Model\Sqlite;
class Table extends Model
{
protected $table="table";
protected $connection = 'sqlite';
}
So legen Sie eine weitere (zweite) Datenbankverbindung mit Eloquent fest:
namespace App\Model\MySql;
class Table extends Model
{
protected $table="table";
protected $connection = 'mysql';
}
Laravel verwendet die in einem Modell definierte $connection
-Eigenschaft, um die in config/database.php
definierte angegebene Verbindung zu verwenden. Wenn die $connection
-Eigenschaft nicht in einem Modell definiert ist, wird der Standardwert verwendet.
Sie können auch eine andere Verbindung mit der Methode static on
angeben:
// Using the sqlite connection
Table::on('sqlite')->select(...)->get()
// Using the mysql connection
Table::on('mysql')->select(...)->get()
Datenbank / Abfrage-Generator
Sie können auch eine andere Verbindung mit dem Query Builder angeben:
// Using the sqlite connection
DB::connection('sqlite')->table('table')->select(...)->get()
// Using the mysql connection
DB::connection('mysql')->table('table')->select(...)->get()
Gerätetest
Laravel stellt seeInDatabase($table,$fielsArray,$connection)
zum Testen des Datenbankverbindungscodes seeInDatabase($table,$fielsArray,$connection)
. In der Unit-Testdatei müssen Sie Folgendes tun:
$this
->json(
'GET',
'result1/2015-05-08/2015-08-08/a/123'
)
->seeInDatabase("log", ["field"=>"value"], 'sqlite');
Auf diese Weise weiß Laravel, welche Datenbankverbindung getestet werden soll.
Datenbanktransaktionen im Komponententest
Laravel ermöglicht es der Datenbank, alle Änderungen während der Tests rückgängig zu machen. Um mehrere Datenbankverbindungen testen zu können, müssen Sie die $connectionsToTransact
Eigenschaften festlegen
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');
}
}