In this article we will learn to print raw sql query in eloquent laravel. Sometime to debug the MySQL query in laravel eloquent we need to echo raw sql query and want to know exact query. In laravel we have multiple methods to print database query in laravel 8 and we can also print the query before executing it.
Laravel eloquent method to print the query
The first approach to print the MySQL query is laravel eloquent method toSql()
which prints the eloquent query without executing it. It returns the raw SQL query however it won’t bind the params as below
<?php
echo Article::where("title","Test")
->orderBy("id",'DESC')
->limit(5)
->toSql();
Output:
select * from `articles` where `title` = ? order by `id` desc limit 5
Debugging the query using laravel query log
Using laravel query log we can print the entire query with params as well. In this type of debugging query is executed and we will get the complete parsed query.
\DB::enableQueryLog();
Article::where("title","Test")->orderBy("id",'DESC')->limit(5)->get();
dd(\DB::getQueryLog());
Output :
array:1 [▼
0 => array:3 [▼
"query" => "select * from `articles` where `title` = ? order by `id` desc limit 5"
"bindings" => array:1 [▼
0 => "Test"
]
"time" => 23.71
]
]
Here we used DB::enableQueryLog
to enable the query log and DB::getQueryLog()
to print the all queries in between of it.