Un tutoriel pour examiner les requêtes SQL générées et exécutées par Eloquent avec la façade Illuminate\Support\Facades\DB dans un projet Laravel
🌎 La version anglaise de cette publication : Laravel - Analyze SQL Queries Generated by Eloquent with the DB Facade
Le framework PHP Laravel met à disposition la classe Illuminate\Support\Facades\DB
, qui permet d'interagir directement avec la base de données sans passer nécessairement par Eloquent (les modèles de Laravel). Toutefois, lorsqu'on utilise Eloquent pour effectuer des requêtes, il peut être utile de connaître les requêtes SQL qui sont exécutées.
Pour obtenir la requête SQL exécutée par Eloquent, ainsi que les valeurs réelles utilisées et le temps d'exécution, la classe DB
offre les méthodes suivantes :
enableQueryLog()
pour activer la journalisation des requêtesgetQueryLog()
pour récupérer les journaux des requêtesIl suffit de commencer par utiliser DB::enableQueryLog()
avant la ou les requêtes que vous souhaitez examiner, puis de terminer par dd(DB::getQueryLog())
pour afficher le journal. Voici un exemple :
use Illuminate\Support\Facades\DB;
DB::enableQueryLog();
$users = User::with("activities")->where("email", "[email protected]")->get();
dd(DB::getQueryLog());
Ce code source génère un tableau contenant les informations suivantes :
[
0 => [
"query" => "select * from `users` where `email` = ?"
"bindings" => [
0 => "[email protected]"
]
"time" => 19.88
]
1 => [
"query" => "select * from `activities` where `activities`.`user_id` in (1)"
"bindings" => []
"time" => 1.59
]
]
Nous avons donc :
query
: la requête SQL exécutéebindings
: les valeurs réelles utilisées pour remplacer les points d’interrogation (?) dans la requêtetime
: le temps d'exécution de la requête en millisecondes.Prenez soin de vous ! 😎
Cette publication vous a plu ?
Partagez-la avec vos ami(e)s sur les réseaux sociaux.
Wilo Ahadi, l'auteur
Passionné de l'informatique, je suis spécialiste en techniques des systèmes et réseaux, développeur web et mobile, infographiste et designer, ... J'aime partager mon expérience en formant sur la plateforme Akili School
Voir profil
Commentaires