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');
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow