Получить запрос, выполненный в 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();
или... Как я могу сохранить в лог все запросы.
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это позволяет бар в нижней части каждой страницы. Одна из его особенностей-перечисление выполненных запросов и сколько времени каждый из них занял.
для красноречивых вы можете просто сделать:
$result->getQuery()->toSql();но вам нужно удалить часть "->get () " из вашего запроса.
Я бы рекомендовал использовать расширение Chrome часам С пакетом Laravel https://github.com/itsgoingd/clockwork. он прост в установке и использовании.
Clockwork-это расширение Chrome для разработки PHP, расширение Инструменты разработчика с новой панелью, предоставляющей все виды информации полезно для отладки и профилирования PHP-скриптов, в том числе информация по запросу, заголовки, получить и отправить данные, куки, сессии данные, запросы к базе данных, маршруты, визуализация среды выполнения приложения и еще. Часовой механизм включает в себя из коробки поддержку Laravel 4 и Тонкий 2 на основе приложений, вы можете добавить поддержку для любого другого или пользовательского фреймворк через расширяемый API.
так как профилировщик еще не вышел в 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());вот результат, который я получаю:
Если вам интересно, я использую Kint для форматирования dd (). http://raveren.github.io/kint/
вот быстрый фрагмент 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, я только что установил его. Инструкции перечислены. Шаги следующие:
- добавить
"loic-sharma/profiler": "1.1.*"в разделе require в композиторе.json- выполнить самообновление=>
php composer.phar self-updateв консоли.- выполнить обновление композитора=>
php composer.phar update loic-sharma/profilerв консоли -- добавить
'Profiler\ProfilerServiceProvider',в массиве провайдера в приложение.php- добавить
'Profiler' => 'Profiler\Facades\Profiler',in этот массив алиасов в приложении.php также- выполнить
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);
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