本文共 956 字,大约阅读时间需要 3 分钟。
为了在Laravel中更方便地记录完整的SQL语句,而不是分开显示语句和参数,我们可以使用数据库监听器来捕获并格式化每个查询。以下步骤展示了如何实现这一点:
DB::listen()
方法来跟踪数据库查询。此外,我们还可以自定义日志记录路径和格式。\DB::listen(function (\Illuminate\Database\Statement $sql) { // 替换占位符 $query = str_replace(['%'], ['%%'], $sql->sql); // 格式化参数 foreach ($sql->bindings as $i => $binding) { if ($binding instanceof \DateTime) { $sql->bindings[$i] = $binding->format('\'Y-m-d H:i:s\''); } elseif (is_string($binding)) { $sql->bindings[$i] = "'$binding'"; } } // 格式化查询 $query = vsprintf($query, $sql->bindings); // 写入日志文件 $logPath = storage_path('logs/' . date('Y-m-d')) . '_query.log'; $logFile = fopen($logPath, 'a+'); fwrite($logFile, "[{$date}] - {$query}\n", date('Y-m-d H:i:s')); fclose($logFile);});
AppServiceProvider
的boot
方法中,这将确保每次数据库查询都被记录到日志文件中。这样,完成后,我们就能在storage/log
目录下找到相应的查询日志文件,里面将包含完整的SQL查询语句及其参数值,便于验证和调试。
转载地址:http://xfgyk.baihongyu.com/