如何记录所有 Eloquent 查询

13 浏览
0 Comments

如何记录所有 Eloquent 查询

我正在Slim3框架中独立使用Eloquent。

我想要记录来自Eloquent的所有数据库查询,我看到了一些实现方法,但我遗漏的是在每个模型请求之后,无需显式代码插入即可记录查询。

我找到了这个链接:

Laravel Eloquent显示查询日志

它有效,但我能做到的最好的是一个Slim中间件,它在所有请求结束时一次性记录所有查询。

可能我需要一个监听器,但我如何使用它并获取所有查询?

这是我在Slim中的Eloquent启动代码:

$capsule = new \Illuminate\Database\Capsule\Manager;
    $capsule->addConnection($config['db']);
    $capsule->getConnection("default")->enableQueryLog();
    $capsule->setAsGlobal();
    //$capsule->setEventDispatcher(new \Illuminate\Events\Dispatcher())->listen($events, $listener);
    $capsule->bootEloquent();

0
0 Comments

问题:如何记录所有Eloquent查询的日志?

原因:为了调试和优化应用程序,我们希望能够记录并查看所有通过Eloquent进行的数据库查询。

解决方法:

1. 首先,我们需要创建一个Illuminate\Database\Capsule\Manager实例,并将数据库配置添加到连接中。

$capsule = new \Illuminate\Database\Capsule\Manager;
$capsule->addConnection($config['db']);

2. 然后,我们需要在默认连接上启用查询日志记录。

$capsule->getConnection("default")->enableQueryLog();

3. 将Eloquent的连接设置为全局连接,以便所有模型都可以使用该连接。

$capsule->setAsGlobal();

4. 设置事件分发器,以便我们可以监听查询事件。

$capsule->getConnection()->setEventDispatcher(new \Illuminate\Events\Dispatcher);

5. 使用匿名函数监听查询事件,并在其中记录查询日志。

$capsule->getConnection()->listen(function ($query) {
    // TODO: Log query.
});

6. 最后,通过调用bootEloquent()方法来启动Eloquent。

通过以上步骤,我们就可以记录并查看所有通过Eloquent进行的数据库查询的日志了。

0