laravel 框架打印sql语句

在laravel 中使用ORM 写SQL查询时,确实写起来很快,但是当我们写复杂查询或者优化SQL时,为了心里有底,基本会想去打印laravel执行后的原始sql语句

laravel 中打印语句有一些三种方式

1. 讨巧的方式,SQL语句故意写错,运行后查询laravel的报错信息中,这种方式只可看到sql执行的第一条语句

2. 原生打印: sql语句和参数是分开的

        DB::connection()->enableQueryLog();
        User::query()->where(['id' => 1])->first();
        dd( DB::getQueryLog());

返回

array:1 [
  0 => array:3 [
    "query" => "select * from `user` where (`id` = ?) limit 1"
    "bindings" => array:1 [
      0 => 1
    ]
    "time" => 123.48
  ]
]

3. 在2的基础上进一步处理

在 App\Providers\AppServiceProvider 文件中的boot函数添加如下内容 (local环境)

        if (config('app.env') === 'local') {
            DB::listen(function ($query) {
                $sql = array_reduce($query->bindings, function($sql, $binding) {
                    return preg_replace('/\?/', is_numeric($binding) ? $binding : sprintf("'%s'", $binding), $sql, 1);
                }, $query->sql);

                Log::info($sql);
            });
        }

即可在日志中查看完整的sql语句

posted @ 2020-11-04 17:03  亚马逊森林  阅读(1571)  评论(0)    收藏  举报