笔记: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 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!