Erläutert die Konfiguration von Datenbankverbindungen in Laravel, Read/Write-Splitting, mehrere Verbindungen, SQL-Ausführung, Query Listening und die Grundlagen von Transaktionen.
Laravel unterstützt offiziell die folgenden Datenbanken:
MySQL / MariaDB
PostgreSQL
SQLite
SQL Server
Sie können dieselbe Verbindungskonfiguration mit Raw SQL, dem Query Builder oder dem Eloquent ORM verwenden.
Diese Seite behandelt die Grundlagen zu Datenbankverbindungen. Praxisnahe Queries finden Sie beim Query Builder, Schema-Management bei Migrations und das Einspielen initialer Daten bei Seeding.
Die Datenbank-Konfiguration ist zentral in config/database.php gebündelt.
Über default legen Sie die Standardverbindung fest, in connections konfigurieren Sie die einzelnen Verbindungen im Detail.
Wenn Sie Lese- (SELECT) und Schreiboperationen (INSERT / UPDATE / DELETE) auf verschiedene Hosts verteilen möchten, konfigurieren Sie innerhalb derselben Verbindung read und write.
Wenn Sie einen verwalteten PostgreSQL-Dienst mit transaktionsbasiertem Connection-Pooling verwenden (etwa PgBouncer), konfigurieren Sie die Optionen pooled und direct.
Die DB-Facade stellt für jeden Query-Typ eine dedizierte Methode bereit.
use Illuminate\Support\Facades\DB;$users = DB::select('select * from users where active = ?', [1]);DB::insert('insert into users (name, email) values (?, ?)', ['Taylor', '[email protected]']);$affected = DB::update('update users set votes = 100 where name = ?', ['Taylor']);$deleted = DB::delete('delete from sessions where user_id = ?', [1]);DB::statement('drop table temporary_imports');
Konkatenieren Sie niemals Nutzereingaben direkt in einen SQL-String. Verwenden Sie unbedingt Bindungsparameter, um SQL-Injection zu verhindern.
Um mehrere Änderungen als atomare Einheit zu behandeln, verwenden Sie DB::transaction().
Tritt eine Ausnahme auf, führt Laravel automatisch einen Rollback aus.
use Illuminate\Support\Facades\DB;DB::transaction(function () { DB::update('update users set votes = 1'); DB::delete('delete from posts where archived = 1');});
Ist ein automatischer Retry bei Deadlocks erforderlich, geben Sie attempts an.