Spread the love

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();

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.

Leave a Reply