ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # DB方式 针对\DB `DB:table()->select(...)->toSql();` # log方式 ~~~ 修改Illuminate\Database\Connection的$loggingQueries = true print_r(DB::getQueryLog()); ~~~ # 记录sql 在AppServiceProvider.php中的boot方法中添加如下代码 即可 ``` public function boot() { \DB::listen(function($query) { $tmp = str_replace('?', '"'.'%s'.'"', $query->sql); $tmp = vsprintf($tmp, $query->bindings); $tmp = str_replace("\\","",$tmp); Log::info($tmp."\n\n\t"); }); } ``` --- 还可以 在 app\Providers\AppServiceProvider 里面: public function boot () { if ( $this->app->environment()==='local') { \Log::info (\DB::getQueryLog()); } } 如果没有效果的话,记得在代码前面执行 `DB::enableQueryLog()` # 记录慢查询的sql ``` \DB::listen(function($query){ $sql=$query->sql; $bindings=$query->bindings; $time=$query->time; if($time>10){ \Log::debug(var_export(compact('sql','bindings','time'),true)); } }); ``` 执行与数据库相关的操作会在 storage\logs\laravel.log 文件中看到记录执行的sql语句 **还有一种** 创建命令php artisan make:console Test --command=laravel:test 找到appconsoleKernel.php 加入CommandsTest::class php artisan laravel:test # 服务提供者方式 在 Providers/AppServiceProvider.php 的 boot 方法添加一行代码就行: ~~~ public function boot() { \DB::listen(function($query) { \Log::info($query); }); } ~~~ 这个时候,只要你刷新页面,有执行到 SQL 查询,就可以到 storage/logs 文件夹下面的 laravel log 查看具体的 sql 语句了。 # 输出sql语句 ~~~ Event::listen('illuminate.query', function($query, $bindings, $time, $name) { var_dump($query);var_dump($bindings); }); ~~~ http://laravel-tricks.com/tricks/display-all-sql-executed-in-eloquent ~~~ DB::listen(function($sql, $bindings, $time) { echo 'SQL语句执行:'.$sql.',参数:'.json_encode($bindings).',耗时:'.$time.'ms'; }); ~~~