Configuration des connexions à la base de données Laravel, séparation lecture/écriture, connexions multiples, exécution SQL, écoute des requêtes et transactions.
Laravel prend en charge officiellement les bases de données suivantes.
MySQL / MariaDB
PostgreSQL
SQLite
SQL Server
Vous utilisez la même configuration de connexion, que ce soit avec du SQL brut, le Query Builder ou l’ORM Eloquent.
Cette page couvre les prérequis de connexion. Pour les requêtes pratiques, consultez le Query Builder, pour la gestion de schéma les migrations, et pour le peuplement initial le seeding.
Les paramètres de base de données sont centralisés dans config/database.php.
Vous choisissez la connexion par défaut avec default et définissez les détails de chaque connexion dans connections.
Pour séparer les lectures (SELECT) et les écritures (INSERT / UPDATE / DELETE) sur des hôtes différents, configurez read et write dans la même connexion.
Si vous utilisez un service PostgreSQL managé fournissant un pooling de connexions en mode transaction (type PgBouncer), configurez les options pooled et direct.
La façade DB propose des méthodes dédiées par type de requête.
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');
Ne concaténez jamais les entrées utilisateur directement dans une chaîne SQL. Utilisez toujours des paramètres liés pour éviter les injections SQL.
Pour traiter plusieurs mises à jour comme une unité atomique, utilisez DB::transaction().
En cas d’exception, Laravel effectue automatiquement le rollback.
use Illuminate\Support\Facades\DB;DB::transaction(function () { DB::update('update users set votes = 1'); DB::delete('delete from posts where archived = 1');});
Si vous avez besoin de retenter en cas de deadlock, spécifiez attempts.