Zoeken…


Meerdere database verbindingen

Met Laravel kan de gebruiker werken aan meerdere databaseverbindingen. Als u verbinding wilt maken met meerdere databases en ze wilt laten samenwerken, moet u oppassen voor de verbindingsinstellingen.

U kunt ook verschillende soorten databases in dezelfde applicatie gebruiken als u dat nodig hebt.

Standaardverbinding In config/database.php ziet u de configuratie-itemoproep:

'default' => env('DB_CONNECTION', 'mysql'),

Deze naam verwijst naar de onderstaande naam mysql :

'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,
    ],
],

Als u de naam van de databaseverbinding niet in andere codes of opdrachten hebt vermeld, pakt Laravel de standaarddatabaseverbindingsnaam op. in meerdere databaseverbindingen, zelfs als u de standaardverbinding instelt, kunt u beter overal instellen welke databaseverbinding u hebt gebruikt.

Migratiebestand

In een migratiebestand, als een enkele databaseverbinding, kunt u het volgende gebruiken:

 Schema::create("table",function(Blueprint $table){
     $table->increments('id');
});

In een verbinding met meerdere databases gebruikt u de methode connection() om Laravel te vertellen welke databaseverbinding u gebruikt:

 Schema::connection("sqlite")->create("table",function(Blueprint $table){
     $table->increments('id');
});

Artisan Migrate

als u een enkele databaseverbinding gebruikt, voert u het volgende uit:

php artisan migrate

Voor een verbinding met meerdere databases kunt u echter beter vertellen welke databaseverbinding de migratiegegevens onderhoudt. dus je zal de volgende opdracht uitvoeren:

php artisan migrate:install --database=sqlite

Met deze opdracht wordt de migratietabel in de doeldatabase geïnstalleerd om de migratie voor te bereiden.

php artisan migrate --database=sqlite

Met deze opdracht wordt de migratie uitgevoerd en worden de migratiegegevens opgeslagen in de doeldatabase

php artisan migrate:rollback --database=sqlite

Met deze opdracht wordt de migratie ongedaan gemaakt en worden de migratiegegevens opgeslagen in de doeldatabase

Welsprekend Model

Om een databaseverbinding op te geven met behulp van Eloquent, moet u de eigenschap $connection definiëren:

namespace App\Model\Sqlite;
class Table extends Model
{
    protected $table="table";
    protected $connection = 'sqlite';
}

Om een andere (tweede) database-verbinding op te geven met behulp van Eloquent:

namespace App\Model\MySql;
class Table extends Model
{
    protected $table="table";
    protected $connection = 'mysql';
}

Laravel gebruikt de $connection eigenschap die in een model is gedefinieerd om de opgegeven verbinding te gebruiken die is gedefinieerd in config/database.php . Als de eigenschap $connection niet in een model is gedefinieerd, wordt de standaardwaarde gebruikt.

U kunt ook een andere verbinding opgeven met de methode static on :

// Using the sqlite connection
Table::on('sqlite')->select(...)->get()
// Using the mysql connection
Table::on('mysql')->select(...)->get()

Database / Query Builder

U kunt ook een andere verbinding opgeven met behulp van de querybuilder:

// Using the sqlite connection
DB::connection('sqlite')->table('table')->select(...)->get()
// Using the mysql connection
DB::connection('mysql')->table('table')->select(...)->get()  

Hoofdstuk toets

Laravel biedt seeInDatabase($table,$fielsArray,$connection) om de seeInDatabase($table,$fielsArray,$connection) van de database te testen. In het testbestand voor eenheden moet u het volgende doen:

$this
    ->json(
        'GET',
        'result1/2015-05-08/2015-08-08/a/123'
    )
     ->seeInDatabase("log", ["field"=>"value"], 'sqlite');

Op deze manier weet Laravel welke databaseverbinding moet worden getest.

Databasetransacties in eenheidstest

Met Laravel kan de database alle wijzigingen ongedaan maken tijdens de tests. Voor het testen van meerdere databaseverbindingen, moet $connectionsToTransact eigenschappen $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');
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow