Sometime to debug the MySQL query in laravel eloquent we need to print the raw MySQL 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();
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());
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.