Laravel Eloquent 显示查询日志

新手上路,请多包涵
use App\Order;

public function show(Order $order) {
    $data = $order->all();
    return dd($order->getQueryLog());

有什么方法可以显示 Eloquent 在 Laravel 中构建的查询?

我试过 getQueryLog(); 但它不起作用

原文由 Benjamin W 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 392
2 个回答

首先,您必须启用查询日志,可以使用

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

然后您可以使用以下代码查看查询日志

$queries = DB::getQueryLog();

如果您想查看最后执行的查询

$last_query = end($queries);

要了解有关日志记录的更多信息,请参阅此 https://laravel.com/docs/5.0/database#query-logging

例子

public function show(Order $order){
    \DB::connection()->enableQueryLog();
    $data = $order->all();
    $queries = \DB::getQueryLog();
    return dd($queries);
}

原文由 kapilpatwa93 发布,翻译遵循 CC BY-SA 4.0 许可协议

查询执行

\Event::listen('Illuminate\Database\Events\QueryExecuted', function ($query) {
            $sql = $query->sql;
            $time = $query->time;
            $connection = $query->connection->getName();

            Log::debug('query : '.$sql);
            Log::debug('time '.$time);
            Log::debug('connection '.$connection);
        });

询问

StaffRegister::all();

输出

[2021-03-14 08:00:57] local.DEBUG: query : select * from `staff_registers`
[2021-03-14 08:00:57] local.DEBUG: time 0.93
[2021-03-14 08:00:57] local.DEBUG: connection mysql

完整的结构

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Log;
use App\Models\StaffRegister;

class AuthController extends Controller
{
   public function index(){

       \Event::listen('Illuminate\Database\Events\QueryExecuted', function ($query) {

           $sql = $query->sql;
           $time = $query->time;
           $connection = $query->connection->getName();

           Log::debug('query : '.$sql);
           Log::debug('time '.$time);
           Log::debug('connection '.$connection);
       });

       $obj = StaffRegister::all();

       return $obj;
   }
}

准确的方法

原文由 Mohamed Raza 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题