линия

Главная

пятница, 11 февраля 2022 г.

Laravel - вывод SQL запроса из конструктора запросов

 Часто работая со сложной логикой построения запроса необходимо посмотреть итоговый SQL запрос. Если на проекте есть веб морда, то это можно легко  посмотреть используя DebugBar, но как быть если у приложения есть только api ? Есть несколько решений: например логировать весь sql запрос. В методе boot класса AppServiceProvider  добавить такой код который записывает все сгенерированные запросы в файл.

----

<?
\DB::listen(function ($query) {
			$log = ["query" => $query->sql, "duration" => $query->time];
			Log::channel('mysql_info')->info(json_encode($log, JSON_UNESCAPED_UNICODE));
		});

---


Но у этого методе есть большой минус. Все запросы попадают в лог. Чтобы записать или отправить в ответ  только нужный sql используйте  такую конструкицю:


<?
DB::enableQueryLog();

App\User::query()
    ->where('created_at', '<', now()->subYear())
    ->with('assignedApps', 'courses')
    ->orderBy('email', 'asc')
    ->limit(5)
    ->get();

dd(DB::getQueryLog());
print_r(DB::getQueryLog());

----

Если есть еще какие то способы рад увидеть в комментариях.

Комментариев нет:

Отправить комментарий