Laravel Eloquent display query log

PhpLaravel

Php Problem Overview


use App\Order;
 
public function show(Order $order) {
    $data = $order->all();
    return dd($order->getQueryLog());

Is there any way to display the query built by Eloquent in Laravel?

I tried getQueryLog(); but its not working

Php Solutions


Solution 1 - Php

First you have to enable query log it can be done using

DB::connection()->enableQueryLog();

then you can use below code to see the query log

$queries = DB::getQueryLog();

if you want to see the last executed query

$last_query = end($queries);

to know more about logging see this https://laravel.com/docs/5.0/database#query-logging

Example

public function show(Order $order){
    \DB::connection()->enableQueryLog();
    $data = $order->all();
    $queries = \DB::getQueryLog();
    return dd($queries);
}

Solution 2 - Php

To see the query logs in laravel.log file you can do it as below.

namespace App\Providers;

use DB;
use Log;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        DB::listen(function($query) {
            Log::info(
                $query->sql,
                $query->bindings,
                $query->time
            );
        });
    }

    // ...
}

Solution 3 - Php

To use getQueryLog() you need to enable it first:

DB::enableQueryLog();
DB::getQueryLog();

If you want to see real queries, you can use Laravel Debugbar, it will show all real queries Laravel created during current request.

Sometimes ->toSql() is also useful.

Solution 4 - Php

Working on 5.6, something like this in AppServiceProvider::boot()

    // Log all DB SELECT statements
    // @codeCoverageIgnoreStart
    if (!app()->environment('testing') && config('app.log_sql')) {
        DB::listen(function ($query) {
            if (preg_match('/^select/', $query->sql)) {
                Log::info('sql: ' .  $query->sql);
                // Also available are $query->bindings and $query->time.
            }
        });
    }

Then in config/app.php, just so it's easy to enable/disable from amending the .env

    'log_sql' => env('LOG_SQL'),

All credit to: https://arjunphp.com/laravel-5-5-log-eloquent-queries/

And this can be parsed for unique queries with:

    grep ") sql:" laravel.log | sed -e "s#.*select\(.*\)\[\]#select\1#" | sort -u

Solution 5 - Php

I know it's an old question, but it might help others that had the same issue I had.

If you use other connection than the default one, you should specify it to get the query log properly.

\DB::connection('YourConnection')->enableQueryLog();
$test = MyModel::all();
$queries = \DB::connection('YourConnection')->getQueryLog();
dd($queries);

Solution 6 - Php

write this before the query DB::enableQueryLog();

DB::enableQueryLog();

$data = $order->all();

$query = DB::getQueryLog();

dd($query);

Solution 7 - Php

Query Execution

\Event::listen('Illuminate\Database\Events\QueryExecuted', function ($query) {          
            $sql = $query->sql; 
            $time = $query->time;
            $connection = $query->connection->getName();
 
            Log::debug('query : '.$sql);
            Log::debug('time '.$time);
            Log::debug('connection '.$connection);
        });

Query

StaffRegister::all();

Output

[2021-03-14 08:00:57] local.DEBUG: query : select * from `staff_registers`  
[2021-03-14 08:00:57] local.DEBUG: time 0.93  
[2021-03-14 08:00:57] local.DEBUG: connection mysql  

complete structure

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Log;
use App\Models\StaffRegister;

class AuthController extends Controller
{
   public function index(){
   
       \Event::listen('Illuminate\Database\Events\QueryExecuted', function ($query) {
      
           $sql = $query->sql; 
           $time = $query->time;
           $connection = $query->connection->getName();

           Log::debug('query : '.$sql);
           Log::debug('time '.$time);
           Log::debug('connection '.$connection);
       });

       $obj = StaffRegister::all(); 
    
       return $obj;
   }
}

Accurate Method

Solution 8 - Php

You can use this package https://github.com/supliu/laravel-query-monitor

Após instalar, abra o terminal e execute o comando:

php artisan laravel-query-monitor

All queries executed by Eloquent will be displayed in real time

Solution 9 - Php

You can use ::toSql() or ->toSql() as demonstrated below:

use App\Order;

public function show(Order $order){

    return $order::toSql();

Or

use App\Order;

public function show(Order $order){

    return $order::where("id", "<>", 0)->toSql();

You might have to enable query log:

DB::enableQueryLog();

Solution 10 - Php

You can use my Laravel package which is work perfectly in Larave 6 and 7. (Not sure about laravel 5 or less.)

For use Install the package via composer: by following command

> composer require dipenparmar12/laravel-query-log

restart server. after this you will see

storage/logs/db-query.log file containing your query logs.

For more details visit Laravel-query-log

Thanks

Solution 11 - Php

If you are using Laravel 6+ (i have not checked below 6), you can use

// show sql and bindings  +  stop execution
DB::table('your_table')->dd();   

// show sql and bindings
DB::table('your_table')->dump(); 

https://laravel.com/docs/7.x/queries#debugging

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBenjamin WView Question on Stackoverflow
Solution 1 - Phpkapilpatwa93View Answer on Stackoverflow
Solution 2 - PhpMuhammadView Answer on Stackoverflow
Solution 3 - PhpAlexey MezeninView Answer on Stackoverflow
Solution 4 - PhpmarkdwhiteView Answer on Stackoverflow
Solution 5 - PhpJulianoView Answer on Stackoverflow
Solution 6 - PhpAbid ShahView Answer on Stackoverflow
Solution 7 - PhpMohamed RazaView Answer on Stackoverflow
Solution 8 - PhpJansen FelipeView Answer on Stackoverflow
Solution 9 - PhpElisha SenooView Answer on Stackoverflow
Solution 10 - Phpdipenparmar12View Answer on Stackoverflow
Solution 11 - PhpBisselView Answer on Stackoverflow