如何记录所有 Eloquent 查询
如何记录所有 Eloquent 查询
我正在Slim3框架中独立使用Eloquent。
我想要记录来自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();
问题:如何记录所有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进行的数据库查询的日志了。