前言
Laravel 的 ORM 是相当好用的。
同时,因为 Laravel 内部帮我们做了不少东西,很多操作都是无感知的,只知道输入什么,输出什么。
有时候,为了能够更好的分析问题,我们需要通过一些运行日志来帮助我们。
方法1
官方推荐 传送门
<?php
namespace App\Providers;
use Illuminate\Support\Facades\DB; use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider {
public function register() { }
public function boot() { DB::listen(function ($query) { Log::info($event->sql . ' bind: ' . json_encode($event->bindings)); }); } }
|
方法2
使用 EventServiceProvider 注册。
<?php
namespace App\Providers;
use App\Listeners\QueryListener; use Illuminate\Database\Events\QueryExecuted; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider {
protected $listen = [ QueryExecuted::class => [ QueryListener::class ], ]; }
|
实现 QueryListener:
<?php namespace App\Listeners;
use Illuminate\Support\Facades\Log; use Illuminate\Database\Events\QueryExecuted;
class QueryListener {
public function handle(QueryExecuted $event) { if (!$event->sql) { return; } Log::info($event->sql . ' bind: ' . json_encode($event->bindings)); } }
|
最终的结果是一致的。
最后
终于可以看到执行的 SQL 了,也可以根据 SQL 来了解 Laravel 大致的一个实现方式。
本文章观点仅代表个人立场,部分观点可能已过时,仅供参考。
本博客所有文章除特别声明外,均采用
CC BY-SA 4.0 协议,转载请注明出处!