笔记:DB常用sql打印+事务使用
执行Sql打印:
DB::enableQueryLog();
//do...
dd(\DB::getQueryLog());
事务启用:
DB::beginTransaction();
try {
//do...
DB::commit();
} catch (\Exception $e) {
Log::info($e->getMessage());
DB::rollBack();
}
开启sql日志:
1.添加listener => php artisan make:listener QueryLogListener
添加handler方法:
public function handle(QueryExecuted $event)
{
//是否启用 Sql 日志
if (env('QUERY_LOG')) {
$sql = $event->sql;
$arg = $event->bindings;
if ($arg) {
foreach ($arg as $key => $value) {
$offset = strpos($sql, '?');
if ($offset !== false) {
if (is_int($value)) {
$value = (int)$value;
} else {
$value = '"' . (string)$value . '"';
}
}
$sql = substr_replace($sql, $value, $offset, strlen('?'));
}
}
$log = vsprintf($sql, $event->bindings);
\Log::info("sql:" . $log . " spend_time:" . $event->time);
}
}
2.EventServiceProvider 类中设置 $listen
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
QueryExecuted::class => [
QueryLogListener::class,
],
];
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: