Получить запрос, выполненный в Laravel 3/4
как я могу получить выполненный запрос в Laravel 3/4, используя Fluent Query Builder или красноречивый 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, в том числе информация о запросе, заголовках, данных GET и POST, cookies, сеансе данные, запросы к базе данных, маршруты, визуализация среды выполнения приложения и еще. Часовой механизм включает в себя из коробки поддержку Laravel 4 и Slim 2 приложения, вы можете добавить поддержку для любого другого или пользовательского framework через расширяемый 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 флаг false если вы хотите только последний 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.log):
[2015-09-25 12:33:29] тестирование.DEBUG: Query 0: {"query": "select * from 'users' where ('user_id'= ?) ", "bindings": ["9"],"time": 0.23}
***Я знаю этот вопрос задал Laravel 3/4, но эта страница появляется при поиске общего ответа. Новички в Laravel могут не знать, что есть разница между версиями. Так как я никогда не вижу DD::enableQueryLog()
упоминается в любом из ответов, которые я обычно нахожу, это мая будьте конкретны для Laravel 5-Возможно, кто-то может прокомментировать это.
вы также можете прослушивать события запроса с помощью этого:
DB::listen(function($sql, $bindings, $time)
{
var_dump($sql);
});
см. информацию из docs здесь под Прослушивание Событий Запроса
использование журнала запросов не дает вам фактического необработанного запроса, особенно если есть связанные значения. Это лучший подход для получения 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, вам нужно вставить это перед запросом или в промежуточное ПО:
\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 этот aliasses массива в приложение.PHP как хорошо - Run
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 просто переименуйте любое имя столбца, он покажет вам ошибку с вашим запросом.. :)