Как я могу получить необработанный SQL-запрос в Laravel 3/4, используя Laravel Query Builder или Eloquent ORM?
Например, что-то вроде этого:
DB::table('users')->where_status(1)->get();
Или:
(posts (id, user_id, ...))
User::find(1)->posts->get();
Иначе, как минимум, как сохранить все выполненные запросы в laravel.log?
Ответы:
Ларавел 4+
В Laravel 4 и позже вам нужно позвонить,
DB::getQueryLog()
чтобы получить все запущенные запросы.Или вы можете скачать пакет профилировщика. Я бы порекомендовал barryvdh / laravel-debugbar , который довольно хорош . Вы можете прочитать инструкции по установке в их хранилище .
Примечание для пользователей Laravel 5: Вам нужно позвонить
DB::enableQueryLog()
перед выполнением запроса. Либо чуть выше строки, выполняющей запрос, либо внутри промежуточного программного обеспечения.Ларавел 3
В Laravel 3, вы можете получить последний выполненный запрос от
Eloquent
модели вызова статического методаlast_query
наDB
классе.Это, однако, требует, чтобы вы включили
profiler
опцию вapplication/config/database.php
. В качестве альтернативы вы можете, как упоминалось в @dualed, включитьprofiler
опцию inapplication/config/application.php
или call,DB::profile()
чтобы все запросы выполнялись в текущем запросе и время их выполнения.источник
ErrorException
: Предупреждение:call_user_func_array()
ожидает, что параметр 1 будет действительным обратным вызовом, у классаIlluminate\Database\MySqlConnection
нет методаgetQueryList
.getQueryLog
. Исправлено сейчас. Спасибо!Вы можете включить « Профилировщик » в Laravel 3, установив
В вашем
application/config/application.php
иapplication/config/database.php
Это позволяет панель внизу каждой страницы. Одна из его функций - перечисление выполненных запросов и продолжительность каждого из них.
источник
Для Eloquent вы можете просто сделать:
Но вам нужно удалить часть «-> get ()» из вашего запроса.
источник
Я бы порекомендовал использовать расширение Chrome Clockwork с пакетом Laravel https://github.com/itsgoingd/clockwork . Это легко установить и использовать.
источник
Поскольку профилировщик еще не реализован в Laravel 4 , я создал эту вспомогательную функцию, чтобы увидеть генерируемый SQL:
ПРИМЕЧАНИЕ . Установите для флага $ all значение false, если требуется только последний запрос SQL.
Я храню такого рода функции в классе DBH.php (сокращение от Database Helper), поэтому я могу вызывать его из любого места, например:
Вот результат, который я получаю:
Если вам интересно, я использую Kint для форматирования dd (). http://raveren.github.io/kint/
источник
if($all == false)
? Почему бы простоif(!$all)
Для Laraver 4 это
источник
Вот небольшой фрагмент кода Javascript, который вы можете добавить в шаблон главной страницы. Пока он включен, все запросы будут выводиться на консоль Javascript вашего браузера. Он печатает их в легко читаемом списке, что позволяет легко просматривать ваш сайт и видеть, какие запросы выполняются на каждой странице.
Когда вы закончите отладку, просто удалите ее из шаблона.
источник
DB::getQueryLog()
возвращает массив, нет необходимости заключать его в "".json_encode
переведу это соответственно.Ларавел 5
Обратите внимание, что это процедурный подход, который я использую для быстрой отладки
в заголовке используйте:
Вывод будет выглядеть примерно так (файл журнала по умолчанию - laravel.log ):
*** Я знаю, что этот вопрос задан Laravel 3/4, но эта страница появляется при поиске общего ответа. Новички в Laravel могут не знать, что есть разница между версиями. Поскольку я не вижу
DD::enableQueryLog()
упоминаний ни в одном из ответов, которые обычно нахожу, это может быть связано с Laravel 5 - возможно, кто-то может прокомментировать это.источник
Вы также можете прослушивать события запроса, используя это:
См. Информацию в документации здесь в разделе « Прослушивание событий запроса».
источник
Использование журнала запросов не дает фактического выполняемого запроса RAW, особенно если есть связанные значения. Это лучший подход для получения исходного SQL:
или более вовлечены:
источник
Если вы используете Laravel 5, вам нужно вставить это перед запросом или в промежуточное ПО:
источник
Или в качестве альтернативы профилировщику Laravel 3 вы можете использовать:
https://github.com/paulboco/profiler или https://github.com/barryvdh/laravel-debugbar
источник
в Laravel 4 вы можете использовать приемник событий для запросов к базе данных.
Разместите этот фрагмент где угодно, например, в
start/global.php
. Запишет запросы в информационный журнал (storage/log/laravel.log
).источник
поместите его в global.php, он запишет ваш sql запрос.
источник
Профилировщик SQL Loic Sharma поддерживает Laravel 4, я только что установил его. Инструкции перечислены здесь . Шаги следующие:
"loic-sharma/profiler": "1.1.*"
в обязательный раздел в composer.jsonphp composer.phar self-update
в консоли.php composer.phar update loic-sharma/profiler
в консоли.'Profiler\ProfilerServiceProvider',
в массив провайдера в app.php'Profiler' => 'Profiler\Facades\Profiler',
добавьте массив aliasses в app.phpphp artisan config:publish loic-sharma/profiler
в консолиисточник
Печать последнего запроса
источник
L4 однострочный
(который пишет запрос):
$q=\DB::getQueryLog();dd(end($q));
источник
Ларавел 3
Еще один способ сделать это:
Для всех запросов результат:
Для последнего результата:
источник
Чтобы получить последний выполненный запрос в laravel, мы будем использовать
DB::getQueryLog()
функцию laravel, которая возвращает все выполненные запросы. Для получения последнего запроса мы будем использоватьend()
функцию, которая возвращает последний выполненный запрос.Я взял ссылку с http://www.tutsway.com/how-to-get-the-last-executed-query-in-laravel.php .
источник
Есть очень простой способ сделать это: из вашего запроса laravel просто переименуйте любое имя столбца, он покажет вам ошибку с вашим запросом .. :)
источник