当前位置: 首页 > 知识库问答 >
问题:

如何在Laravel 5中执行查询?DB::getQueryLog()返回空数组

罗心思
2023-03-14

我试图查看日志查询,但DB::getQueryLog()只是返回一个空数组:

$user = User::find(5);
print_r(DB::getQueryLog());

后果

Array
(
)

如何查看此查询的日志?

共有3个答案

蔺霄
2023-03-14

您需要首先启用查询日志记录

DB::enableQueryLog();

然后,您可以通过以下方式获取查询日志:

dd(DB::getQueryLog());

最好在应用程序启动之前启用查询日志记录,这可以在BeforeMiddleware中完成,然后在AfterMiddleware中检索执行的查询。

阳修永
2023-03-14

如果您真正关心的是用于快速调试目的的实际查询(最后一次运行):

DB::enableQueryLog();

# your laravel query builder goes here

$laQuery = DB::getQueryLog();

$lcWhatYouWant = $laQuery[0]['query']; # <-------

# optionally disable the query log:
DB::disableQueryLog();

$laQuery[0]上执行print\r()以获取完整的查询,包括绑定。(上面的$lcWhatYouWant变量将用??替换变量)

如果您使用的不是mysql主连接,则需要使用以下连接:

DB::connection("mysql2")->enableQueryLog();

DB::connection("mysql2")->getQueryLog();

(使用“mysql2”所在的连接名)

松德曜
2023-03-14

默认情况下,在Laravel 5中禁用查询日志:https://github.com/laravel/framework/commit/e0abfe5c49d225567cb4dfd56df9ef05cc297448

您需要通过调用以下命令来启用查询日志:

DB::enableQueryLog();

// and then you can get query log

dd(DB::getQueryLog());

或注册事件侦听器:

DB::listen(
    function ($sql, $bindings, $time) {
        //  $sql - select * from `ncv_users` where `ncv_users`.`id` = ? limit 1
        //  $bindings - [5]
        //  $time(in milliseconds) - 0.38 
    }
);  

如果有多个DB连接,则必须指定要记录的连接

要启用我的\u连接的查询日志

DB::connection('my_connection')->enableQueryLog();

获取my_connection的查询日志:

print_r(
   DB::connection('my_connection')->getQueryLog()
);
class BeforeAnyDbQueryMiddleware
{
    public function handle($request, Closure $next)
    {
        DB::enableQueryLog();
        return $next($request);
    }

    public function terminate($request, $response)
    {
        // Store or dump the log data...
        dd(
            DB::getQueryLog()
        );
    }
}

中间件链不会为artisan命令运行,因此对于CLI执行,您可以在artisan.start事件侦听器中启用查询日志。

例如,你可以把它放在bootstrap/app.php文件中

$app['events']->listen('artisan.start', function(){
    \DB::enableQueryLog();
});

Laravel将所有查询保存在内存中。因此,在某些情况下,例如插入大量行时,或具有大量查询的长时间运行的作业时,这可能会导致应用程序使用多余的内存。

在大多数情况下,您只需要在调试时使用查询日志,如果是这种情况,我建议您仅在开发时启用它。

if (App::environment('local')) {
    // The environment is local
    DB::enableQueryLog();
}

工具书类

  • https://laravel.com/docs/5.0/database#query-伐木
 类似资料:
  • 问题内容: 我正在尝试查看查询日志,但只返回一个空数组: 结果 如何查看此查询的日志? 问题答案: 您将需要通过调用以下命令来启用查询日志: 或注册一个事件监听器: 一些技巧 1.多个数据库连接 如果您有多个数据库连接,则必须指定要记录的连接 启用查询日志: 获取以下查询日志: 2.在哪里启用查询日志? 对于HTTP请求生命周期,可以在某些 中间件的方法中启用查询日志,然后在同一中间件的方法中检索

  • 情境:我正在构建一个Web API,它查询数据库,然后通过JSON返回结果。 所以我的问题是,将一个“null”值传递回原始调用方的正确方法是什么?我可以用各种方法检查“null”,然后返回一个空字符串或整数的“-1”,但我想知道除了一开始就没有“null”之外,正确的方法是什么。

  • 问题内容: 假设我有一个名为的模型。我有一个带有对象ID的数组。 我想获取与我拥有的ID数组“相交”的所有用户记录。 问题答案: 您需要使用$ in运算符> https://docs.mongodb.com/manual/reference/operator/query/in/#op._S_in 例如:

  • 我正在对 Azure Cosmos 数据库运行查询,无论分页如何,我都需要知道检索到的文档的总数。如果检索到的文档数量很大,则针对不分页的实际查询运行 Count 查询可能会非常繁重。 在下面的链接中,描述了如何访问Cosmos db.NET SDK V2中的查询“查询执行度量”,如果有人指导我如何使用SDK V3,我将不胜感激。 https://docs.microsoft.com/en-us/

  • 问题内容: 如何计算MySQL查询返回的行数? 问题答案: 获取查询结果中的总行数… 您可以仅迭代结果并计数。您没有说使用什么语言或客户端库,但是API确实提供了mysql_num_rows函数,该函数可以告诉您结果中的行数。 例如,这在PHP中作为mysqli_num_rows函数公开。编辑问题以提及您正在使用PHP时,这是一个使用mysqli函数的简单示例: 获取符合某些条件的行数… 只需使用