phplaravelormeloquentlaravel-query-builder

Get the Query Executed in Laravel 3/4


How can I retrieve the raw executed SQL query in Laravel 3/4 using Laravel Query Builder or Eloquent ORM?

For example, something like this:

DB::table('users')->where_status(1)->get();

Or:

(posts (id, user_id, ...))

User::find(1)->posts->get();

Otherwise, at the very least how can I save all queries executed to laravel.log?


Solution

  • Laravel 4+

    Note for Laravel 5 users: You'll need to call DB::enableQueryLog() before executing the query. Either just above the line that runs the query or inside a middleware.

    In Laravel 4 and later, you have to call DB::getQueryLog() to get all ran queries.

    $queries = DB::getQueryLog();
    $last_query = end($queries);
    

    Or you can download a profiler package. I'd recommend barryvdh/laravel-debugbar, which is pretty neat. You can read for instructions on how to install in their repository.


    Laravel 3

    In Laravel 3, you can get the last executed query from an Eloquent model calling the static method last_query on the DB class.

    DB::last_query();
    

    This, however, requires that you enable the profiler option in application/config/database.php. Alternatively you could, as @dualed mentioned, enable the profiler option, in application/config/application.php or call DB::profile() to get all queries ran in the current request and their execution time.