Czasami musimy zobaczyć jak wygląda nasze wygenerowane zapytanie przez Eloquent czy DB.
Możemy w prawdzie zainstalować dodatek laravel-debugbar jednak nie zawsze może być on pomocny.
Przedstawię Wam prosty i skuteczny sposób na podglądanie zapytań :)
Przygotowanie
Aby móc podglądać zapytania musimy włączyć logowanie.
\DB::enableQueryLog();
Możemy to wrzucić albo do jakiegoś ServiceProvider np: AppServiceProvider
lub bezpośrednio przed zapytanie które chcemy badać.
Czary
Najpierw kawałek kodu a potem wyjaśnienie:
$queries = \DB::getQueryLog();
foreach($queries as $key => $query) {
$queries[$key]['raw'] = $query['query'];
for($i=0, $counter = count($query['bindings']); $i < $counter; $i++) {
$queries[$key]['raw'] = preg_replace('/\?/', "'".array_shift($query['bindings'])."'", $queries[$key]['raw'], 1);
}
}
dd($queries);
Ten kawałek kodu pobierze nam wszystkie zalogowane zapytania wykonane w bieżącej sesji, podstawi nam parametry oraz wypluje na ekran.
Przykładowy wynik wygląda tak:
array:1 [
0 => array:4 [
"query" => "select * from `program_service_charges` where ((program_id = ? AND user_id = ? AND role_id IS NULL) OR (program_id = ? AND role_id = ? AND user_id IS NULL) OR (program_id = ? AND user_id IS NULL AND role_id IS NULL)) and `service` = ? order by `user_id` desc, `role_id` desc limit 1"
"bindings" => array:6 [
0 => 1
1 => 1
2 => 1
3 => 1
4 => 1
5 => "cb_mo_25"
]
"time" => 1.35
"raw" => "select * from `program_service_charges` where ((program_id = '1' AND user_id = '1' AND role_id IS NULL) OR (program_id = '1' AND role_id = '1' AND user_id IS NULL) OR (program_id = '1' AND user_id IS NULL AND role_id IS NULL)) and `service` = 'cb_mo_25' order by `user_id` desc, `role_id` desc limit 1"
]
]