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