Получить запрос, выполненный в 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);
Ответ 11
Или как альтернатива профилировщику laravel 3 вы можете использовать:
https://github.com/paulboco/profiler
или
https://github.com/barryvdh/laravel-debugbar
Ответ 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 просто переименуйте любое имя столбца, оно покажет вам ошибку с вашим запросом..:)