Получить запрос, выполненный в Laravel 3/4

Как я могу получить выполненный запрос в Laravel 3/4, используя Fluent Query Builder или Eloquent ORM.

Например:

DB::table('users')->where_status(1)->get();

Или (posts (id, user_id, ...))

User::find(1)->posts->get();

Или... Как я могу сохранить в журнале, все выполненные запросы.

Ответ 1

Laravel 4

В Laravel 4 вы должны вызвать DB::getQueryLog(), чтобы получить все запрошенные запросы.

$queries = DB::getQueryLog();
$last_query = end($queries);

Или вы можете загрузить пакет профилировщика. Я бы рекомендовал barryvdh/laravel-debugbar, что довольно аккуратно. Вы можете прочитать инструкции по установке в своем хранилище .


Laravel 3

В Laravel 3 вы можете получить последний выполненный запрос из модели Eloquent, вызывающий статический метод last_query в классе DB.

DB::last_query();

Это, однако, требует включения опции profiler в application/config/database.php. В качестве альтернативы вы могли бы, как упоминалось выше, включить параметр profiler в application/config/application.php или вызвать DB::profile(), чтобы все запросы выполнялись в текущем запросе и время их выполнения.

Ответ 2

Вы можете включить "Профайлер" в Laravel 3, установив

'profiler' => true,

В ваших application/config/application.php и application/config/database.php

Это позволяет использовать панель внизу каждой страницы. Одной из его особенностей является перечисление выполненных запросов и длительность каждого из них.

enter image description here

Ответ 3

Для Eloquent вы можете просто сделать:

$result->getQuery()->toSql();

Но вам нужно удалить часть "- > get()" из вашего запроса.

Ответ 4

Я бы рекомендовал использовать расширение Chrome Clockwork с пакетом Laravel https://github.com/itsgoingd/clockwork. Его легко установить и использовать.

Clockwork - это расширение Chrome для разработки PHP, расширяющее Инструменты разработчика с новой панелью, предоставляющей все виды информации полезно для отладки и профилирования ваших скриптов PHP, включая информация по запросу, заголовки, данные GET и POST, файлы cookie, сеанс данные, запросы к базе данных, маршруты, визуализация времени выполнения приложения и более. Clockwork включает в себя поддержку Box Larvel 4 и Slim 2, вы можете добавить поддержку для любого другого или пользовательского с помощью расширяемого API.

enter image description here

Ответ 5

Поскольку профилировщик еще не находится в Laravel 4, я создал эту вспомогательную функцию, чтобы увидеть генерируемый SQL:

    public static function q($all = true) 
    {
        $queries = DB::getQueryLog();

        if($all == false) {
            $last_query = end($queries);
            return $last_query;
        }

        return $queries;
    }

ПРИМЕЧАНИЕ. Установите флаг $all в значение false, если вам нужен только последний запрос SQL.

Я сохраняю подобные функции в классе DBH.php(сокращение от Database Helper), поэтому я могу вызвать его из любого места:

dd(DBH::q()); 

Вот результат, который я получаю: enter image description here

Если вам интересно, я использую Kint для форматирования dd(). http://raveren.github.io/kint/

Ответ 6

Для Laraver 4 это

DB::getQueryLog()

Ответ 7

Вот быстрый фрагмент Javascript, который вы можете наложить на свой шаблон главной страницы. Пока он включен, все запросы будут выводиться на ваш браузер Javascript Console. Он печатает их в легко читаемом списке, что упрощает просмотр вашего сайта и просмотр того, какие запросы выполняются на каждой странице.

Когда вы закончите отладку, просто удалите ее из своего шаблона.

<script type="text/javascript">
    var queries = {{ json_encode(DB::getQueryLog()) }};
    console.log('/****************************** Database Queries ******************************/');
    console.log(' ');
    queries.forEach(function(query) {
        console.log('   ' + query.time + ' | ' + query.query + ' | ' + query.bindings[0]);
    });
    console.log(' ');
    console.log('/****************************** End Queries ***********************************/');
</script>

Ответ 8

Laravel 5

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

    DB::enableQueryLog();

    // Run your queries
    // ...

    // Then to retrieve everything since you enabled the logging:
    $queries = DB::getQueryLog();
    foreach($queries as $i=>$query)
    {
        Log::debug("Query $i: " . json_encode($query));
    }

в заголовке, используйте:

     use DB;
     use Illuminate\Support\Facades\Log;

Результат будет выглядеть примерно так (файл журнала по умолчанию laravel.log):

[2015-09-25 12:33:29] testing.DEBUG: Query 0: { "query": "select * from 'users' где ('user_id' =?)", "bindings": [ "9" ], "time": 0.23}

*** Я знаю, что этот вопрос задал Laravel 3/4, но эта страница появляется при поиске общего ответа. Новички в Laravel могут не знать, что существует разница между версиями. Поскольку я никогда не вижу DD::enableQueryLog(), упомянутого в любом из ответов, которые я обычно нахожу, это может быть специфично для Laravel 5 - возможно, кто-то может прокомментировать это.

Ответ 9

Вы также можете прослушивать события запроса, используя это:

DB::listen(function($sql, $bindings, $time)
{
    var_dump($sql);
});

См. информацию из документации здесь в разделе Прослушивание событий запроса

Ответ 10

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

DB::table('tablename')->toSql();

или более:

$query = Article::whereIn('author_id', [1,2,3])->orderBy('published', 'desc')->toSql();
dd($query);

Ответ 12

Если вы используете Laravel 5, вам нужно вставить это перед запросом или промежуточным программным обеспечением:

\DB::enableQueryLog();

Ответ 13

в Laravel 4 вы можете использовать прослушиватель событий для запросов к базе данных.

Event::listen('illuminate.query', function($sql, $bindings)
{
    foreach ($bindings as $val) {
        $sql = preg_replace('/\?/', "'{$val}'", $sql, 1);
    }

    Log::info($sql);
});

Поместите этот фрагмент в любом месте, например. в start/global.php. Он будет записывать запросы в информационный журнал (storage/log/laravel.log).

Ответ 14

Event::listen('illuminate.query', function($sql, $param)
{
    \Log::info($sql . ", with[" . join(',', $param) ."]<br>\n");
});

поместите его в файл global.php, он запишет ваш SQL-запрос.

Ответ 15

Профайлер Loic Sharma SQL поддерживает Laravel 4, я только что установил его. Ниже приведены инструкции . Шаги следующие:

  • Добавить "loic-sharma/profiler": "1.1.*" в разделе require в composer.json
  • Выполните самообновление = > php composer.phar self-update в консоли.
  • Выполните обновление композитора = > php composer.phar update loic-sharma/profiler в консоли `
  • Добавить 'Profiler\ProfilerServiceProvider', в массив поставщика в app.php
  • Добавить 'Profiler' => 'Profiler\Facades\Profiler', в aliasses array в app.php, а также
  • Запустите php artisan config:publish loic-sharma/profiler в консоли

Ответ 16

Печать последнего запроса

$queries = \DB::getQueryLog();
$last_query = end($queries);

// Add binding to query
foreach ($last_query['bindings'] as $val) {
        $last_query['query'] = preg_replace('/\?/', "'{$val}'", $last_query['query'], 1);
}
dd($last_query);

Ответ 17

L4 однострочный

(который пишет запрос):

$q=\DB::getQueryLog();dd(end($q));

Ответ 18

Laravel 3

Другой способ сделать это:

#config/database.php

'profiler' => true

Для всех запросов:

print_r(DB::profiler());

За последний результат:

print_r(DB::last_query());

Ответ 19

Чтобы получить последний выполненный запрос в laravel, мы будем использовать DB::getQueryLog() функцию laravel, чтобы он возвращал все выполненные запросы. Чтобы получить последний запрос, мы будем использовать функцию end(), которая возвращает последний выполненный запрос.

$student = DB::table('student')->get();
$query = DB::getQueryLog();
$lastQuery = end($query);
print_r($lastQuery);

Я взял ссылку из http://www.tutsway.com/how-to-get-the-last-executed-query-in-laravel.php.

Ответ 20

Существует очень простой способ сделать это, из вашего запроса laravel просто переименуйте любое имя столбца, оно покажет вам ошибку с вашим запросом..:)