Laravel предоставляет довольно удобную реализацию ActiveRecord для работой с базой данных. В большинстве случаев при работе с Laravel редко приходится писать сами SQL-запросы, т.к. взаимодействие происходит посредством встроенных методов. Однако, если есть необходимость, мы можем вывести строку SQL запроса. В Laravel 8 существует несколько методов для вывода строки запроса, давайте рассмотрим их.
Существует в арсенале Laravel специальный метод, именуемый toSql(). Суть работы этого метода проста, вместо выполнения запроса, вернётся строка в виде SQL запроса. Таким образом, можно просмотреть то, что мы «скармливаем» базе данных.
echo Article::where("title","Test") ->orderBy("id",'DESC') ->limit(5) ->toSql();
Результатом работы данного метода будет строка SQL запроса:
select * from `articles` where `title` = Test order by `id` desc limit 5
Это первый способ, есть другой способ – это просмотр журнала отладки запросов в Laravel.
В Laravel есть встроенный механизм отладки запросов, который позволяет вывести сам SQL запрос, а так же просмотреть их параметры. Правда здесь уже непосредственно выполняется запрос, и мы имеет возможность проанализировать его.
\DB::enableQueryLog(); Article::where("title","Test")->orderBy("id",'DESC')->limit(5)->get(); dd(\DB::getQueryLog());
Данные будут показаны в таком виде:
array:1 [▼ 0 => array:3 [▼ "query" => "select * from `articles` where `title` = Test order by `id` desc limit 5" "bindings" => array:1 [▼ 0 => "Test" ] "time" => 21.54 ] ]
Во втором примере, перед самим запросом, мы включили журнал с помощью метода DB::enableQueryLog(). После выполнения запроса, с помощью метода DB::getQueryLog() вывели все запросы, которые выполнялись между этими методами. Чем уникален второй способ, тут удобно анализировать выполнение сразу несколько запросов.