Как получить последний запрос на запуск в CakePHP 3.2?

Я хочу получить последний выполненный запрос в CakePHP 3.2, я использовал следующее в CakePHP 2.x:

function getLastQuery() {
        Configure::write('debug', 2);
        $dbo = $this->getDatasource();
        $logs = $dbo->getLog();
        $lastLog = end($logs['log']);
        $latQuery = $lastLog['query'];
        echo "<pre>";
        print_r($latQuery);
    }

Как я могу сделать это в CakePHP 3.x?

2 ответа

Решение

Проще говоря: все, что вам нужно сделать, это изменить config /app.php

Найти Datasources конфигурация и настройка 'log' => true

'Datasources' => [
    'default' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => 'localhost',

        ...

        'log' => true,  // Set this
    ]
]

Если ваше приложение находится в режиме отладки, теперь вы увидите запрос SQL, когда на вашей странице отобразится ошибка SQL. Если у вас не включен режим отладки, вы можете записать SQL-запросы в файл, также добавив следующее:

конфиг /app.php

Найти Log конфигурации и добавьте новый тип журнала:

'Log' => [
    'debug' => [
        'className' => 'Cake\Log\Engine\FileLog',
        'path' => LOGS,
        'file' => 'debug',
        'levels' => ['notice', 'info', 'debug'],
        'url' => env('LOG_DEBUG_URL', null),
    ],
    'error' => [
        'className' => 'Cake\Log\Engine\FileLog',
        'path' => LOGS,
        'file' => 'error',
        'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
        'url' => env('LOG_ERROR_URL', null),
    ],

    // Add the following...

    'queries' => [
        'className' => 'File',
        'path' => LOGS,
        'file' => 'queries.log',
        'scopes' => ['queriesLog']
    ]
],

Ваши SQL-запросы теперь будут записаны в файл журнала, который вы можете найти в /logs/queries.log

В контроллере нам нужно написать две строки следующим образом

echo "<pre>";
print_r(debug($queryResult));die; 

Он покажет весь результат вместе с синтаксисом запроса sql. Здесь мы используем отладку для отображения результата.

База данных \ConnectionManager::get() была добавлена. Он заменяет getDataSource()

Следуя Cookbook 3.0, вам нужно включить Query Logging и либо выберите файл или консоль регистрации.

use Cake\Log\Log;

// Console logging
Log::config('queries', [
    'className' => 'Console',
    'stream' => 'php://stderr',
    'scopes' => ['queriesLog']
]);

// File logging
Log::config('queries', [
    'className' => 'File',
    'path' => LOGS,
    'file' => 'queries.log',
    'scopes' => ['queriesLog']
]);

Поваренная книга 3.0 - ведение журнала запросов

Другие вопросы по тегам