Laravel Eloquent 构建器查询日志

5 浏览
0 Comments

Laravel Eloquent 构建器查询日志

我为我们的API制作了一个JSON搜索引擎

拼接查询的逻辑如下:

使用Laravel宏在Eloquent模型上启用搜索方法,该方法创建一个类的实例并运行搜索方法:

/**
 * @var $this Builder
 */
$searcher = new Searcher($this, $request);
$searcher->search();

为了保持事物分离,动态实例化具有URL查询逻辑的请求参数类,并将其作为依赖项具有相同的查询构建器。在foreach循环内执行以下操作:

new $parameter($this->request, $this->builder, $this->modelConfig);

为了查看实际搜索的内容,我设置了日志,记录实际的查询和绑定:

Log::info('[Search] SQL: ' . $this->builder->toSql() . " Bindings: " . implode(', ', $this->builder->getBindings()));

现在我遇到的问题是,当加载相关模型(在一个请求参数(RelationsParameter)中使用->with() )时,我确实得到了我要求的内容,所以模型与传递给它的关系一起加载,但是查询中从未反映出来。

我总是得到SELECT * FROM table WHERE something,没有提及相关表。有没有办法获得底层的查询?

0
0 Comments

Laravel Eloquent构建器查询日志的问题是指在使用Laravel框架进行数据库查询时,无法获取或记录查询日志的情况。下面将分析这个问题出现的原因以及解决方法。

问题原因:

1. 在代码中未启用查询日志功能。

2. 未正确使用Laravel的查询日志方法。

解决方法:

1. 启用查询日志功能:

在代码中使用以下方法启用查询日志功能:

\DB::connection()->enableQueryLog();
   // your code
   \DB::connection()->disableQueryLog();
   

这样就可以在执行数据库查询之后获取查询日志。

2. 获取查询日志:

使用\DB::getQueryLog()方法可以获取已经启用的查询日志,返回一个包含所有查询的数组。

另外,如果只是在开发过程中需要记录查询日志,可以使用barryvdh/laravel-debugbar扩展包,该扩展包提供了更加强大的调试功能,包括查询日志的记录。

通过以上方法,可以解决Laravel Eloquent构建器查询日志的问题,确保能够正常获取和记录查询日志,方便开发和调试。

0
0 Comments

Laravel Eloquent Builder查询日志问题的原因和解决方法

在深入研究Laravel本身时,有一个问题是为什么toSql()方法不能同时输出关联的SQL语句,原因是在eagerLoadRelations方法被触发之前,SQL语句已经被编译了。

因此,目前无法在使用查询构建器时同时输出整个SQL语句。

根据stackoverflow用户halloei的建议,可以输出所有执行的查询语句,但是这对我来说并没有帮助,因为它要求我在我的包之外添加代码。

解决这个问题的方法是使用Laravel的调试工具,可以通过设置DB_CONNECTION配置文件中的log选项来启用查询日志记录。在日志文件中,可以查看所有执行的查询语句,包括关联查询。

以下是解决方法的步骤:

1. 打开项目根目录下的.env文件。

2. 找到DB_CONNECTION配置项,并将其值设置为log

3. 保存.env文件并关闭。

4. 在Laravel项目中执行查询操作时,将会将查询日志记录到默认的日志文件中。

通过使用查询日志记录功能,可以查看每个查询的完整SQL语句,包括关联查询。这对于调试和优化查询非常有帮助。

需要注意的是,查询日志记录会在生产环境中产生大量的日志文件,因此建议仅在开发和调试阶段启用查询日志记录。

Laravel Eloquent Builder查询日志问题导致无法同时输出整个SQL语句和关联查询的原因是SQL语句在关联查询方法之前被编译。解决这个问题的方法是通过设置DB_CONNECTION配置文件中的log选项来启用查询日志记录。通过查询日志记录功能,可以查看每个查询的完整SQL语句,包括关联查询,对于调试和优化查询非常有帮助。

0