Получить запрос, выполненный в 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();


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

948   20  

20 ответов:

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

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

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

'profiler' => true,

в своем application/config/application.php и application/config/database.php

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

enter image description here

для красноречивых вы можете просто сделать:

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

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

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

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

enter image description here

так как профилировщик еще не вышел в 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 флаг ложные если вы хотите только последний SQL-запрос.

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

dd(DBH::q()); 

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

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

для Laraver 4 это

DB::getQueryLog()

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

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

<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>

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.журнал):

[2015-09-25 12:33:29] тестирование.DEBUG: Query 0: {"query": "select * from 'пользователи', где ('ид_пользователя' = ?)","привязки":["9"],"время":0.23}

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

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

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

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

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

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

или более активное участие:

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

или в качестве альтернативы Laravel 3 profiler вы можете использовать:

https://github.com/paulboco/profiler или https://github.com/barryvdh/laravel-debugbar

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

\DB::enableQueryLog();

в 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. Он будет записывать запросы в журнал info (storage/log/laravel.log).

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

поставить его в мировой.php он будет регистрировать ваш sql-запрос.

LOIC Sharma SQL profiler поддерживает Laravel 4, я только что установил его. Инструкции перечислены. Шаги следующие:

  1. добавить "loic-sharma/profiler": "1.1.*" в разделе require в композиторе.json
  2. выполнить самообновление=>php composer.phar self-update в консоли.
  3. выполнить обновление композитора=>php composer.phar update loic-sharma/profiler в консоли -
  4. добавить 'Profiler\ProfilerServiceProvider', в массиве провайдера в приложение.php
  5. добавить 'Profiler' => 'Profiler\Facades\Profiler', in этот массив алиасов в приложении.php также
  6. выполнить php artisan config:publish loic-sharma/profiler в консоли

последний запрос print

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

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

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

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

Laravel 3

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

#config/database.php

'profiler' => true

для всех запросов результат:

print_r(DB::profiler());

для последнего результата:

print_r(DB::last_query());

чтобы получить последний выполненный запрос в 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.

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

Comments

    Ничего не найдено.