Журнальный журнал запросов Laravel Eloquent

use App\Order;

public function show(Order $order){

        $data = $order->all();
        return dd($order->getQueryLog());

Есть ли способ отобразить запрос, созданный Eloquent в Laravel?

Я пытался getQueryLog();, но это не работает

Ответ 1

Сначала вам нужно включить журнал запросов это можно сделать, используя

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);
}

Ответ 2

Чтобы использовать getQueryLog(), вам нужно сначала включить его:

DB::enableQueryLog();
DB::getQueryLog();

Если вы хотите видеть реальные запросы, вы можете использовать Laravel Debugbar, он покажет все реальные запросы Laravel, созданные во время текущего запроса.

Иногда ->toSql() также полезен.

Ответ 3

Работает на 5.6, примерно так в AppServiceProvider :: boot()

    // Log all DB SELECT statements
    // @codeCoverageIgnoreStart
    if (!app()->environment('testing') && config('app.log_sql')) {
        DB::listen(function ($query) {
            if (preg_match('/^select/', $query->sql)) {
                Log::info('sql: ' .  $query->sql);
                // Also available are $query->bindings and $query->time.
            }
        });
    }

Затем в config/app.php, чтобы было легко включить/отключить изменение .env

    'log_sql' => env('LOG_SQL'),

Все кредиты: https://arjunphp.com/laravel-5-5-log-eloquent-queries/

И это может быть проанализировано для уникальных запросов с помощью:

    grep ") sql:" laravel.log | sed -e "s#.*select\(.*\)\[\]#select\1#" | sort -u

Ответ 4

Я знаю, что это старый вопрос, но он может помочь другим, у которых была такая же проблема, как и у меня.

Если вы используете соединение, отличное от соединения по умолчанию, вы должны указать его для правильного ведения журнала запросов.

\DB::connection('YourConnection')->enableQueryLog();
$test = MyModel::all();
$queries = \DB::connection('YourConnection')->getQueryLog();
dd($queries);

Ответ 5

Чтобы просмотреть журналы запросов в файле laravel.log, используйте следующий способ.

namespace App\Providers;

use DB;
use Log;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        DB::listen(function($query) {
            Log::info(
                $query->sql,
                $query->bindings,
                $query->time
            );
        });
    }

    // ...
}

Ответ 6

Вы можете использовать ::toSql() или ->toSql(), как показано ниже:

use App\Order;

public function show(Order $order){

    return $order::toSql();

Или

use App\Order;

public function show(Order $order){

    return $order::where("id", "<>", 0)->toSql();

Возможно, вам придется включить журнал запросов:

DB::enableQueryLog();