laravel5.2 実行SQLのログを取る

laravel5.1 と 5.2 では違う。

laravel5.1 はこうらしい

<?php

namespace App\Providers;

use DB;
use Illuminate\Support\ServiceProvider;

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

            // ここでログにかいたりなんだり


        });
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

laravel.com

laravel5.2 ではしれっとこう変わった

<?php

namespace App\Providers;

use DB;
use Illuminate\Support\ServiceProvider;

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

            // おーこっちのほうがわかりやすいかな?
        });
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

laravel.com

開発環境だけログとりましょう

if (config('app.env') !== 'production') {
    ¥Log::info("Query Time:{$query->time}] $query->sql, data:[[implode(', ', $query->bindings)]]");
} 

$query->time は時間、$query->sqlSQL、$query->bindingsは引数。