Jak mogę pobrać surowo wykonane zapytanie SQL w Laravel 3/4 za pomocą Laravel Query Builder lub Eloquent ORM?
Na przykład coś takiego:
DB::table('users')->where_status(1)->get();
Lub:
(posts (id, user_id, ...))
User::find(1)->posts->get();
W przeciwnym razie, przynajmniej jak mogę zapisać wszystkie zapytania wykonane w laravel.log?
Odpowiedzi:
Laravel 4+
W Laravel 4 i późniejszych musisz zadzwonić,
DB::getQueryLog()
aby uzyskać wszystkie uruchomione zapytania.Lub możesz pobrać pakiet profilera. Polecam barryvdh / laravel-debugbar , co jest całkiem miłe. Możesz przeczytać instrukcje dotyczące instalacji w ich repozytorium .
Uwaga dla użytkowników Laravel 5: Musisz zadzwonić
DB::enableQueryLog()
przed wykonaniem zapytania. Albo tuż nad linią uruchamiającą zapytanie, albo w oprogramowaniu pośrednim.Laravel 3
W Laravel 3 możesz uzyskać ostatnie wykonane zapytanie z
Eloquent
modelu wywołującego metodę statycznąlast_query
wDB
klasie.Wymaga to jednak włączenia
profiler
opcji wapplication/config/database.php
. Alternatywnie możesz, jak wspomniano @dualed, włączyćprofiler
opcję, wapplication/config/application.php
lub wywołać,DB::profile()
aby wszystkie zapytania były uruchamiane w bieżącym żądaniu i czasie ich wykonywania.źródło
ErrorException
: Ostrzeżenie:call_user_func_array()
oczekuje, że parametr 1 będzie prawidłowym wywołaniem zwrotnym, klasaIlluminate\Database\MySqlConnection
nie ma metodygetQueryList
.getQueryLog
. Naprawiono to teraz. Dzięki!Możesz włączyć „ Profiler ” w Laravel 3, ustawiając
W twoim
application/config/application.php
iapplication/config/database.php
Umożliwia to pasek na dole każdej strony. Jedną z jego funkcji jest wyświetlenie listy wykonanych zapytań i czasu ich trwania.
źródło
W przypadku Eloquent możesz po prostu:
Ale musisz usunąć część „-> get ()” z zapytania.
źródło
Polecam używanie rozszerzenia Chrome Clockwork z pakietem Laravel https://github.com/itsgoingd/clockwork . Jest łatwy w instalacji i obsłudze.
źródło
Ponieważ profiler nie jest jeszcze dostępny w Laravel 4 , stworzyłem tę funkcję pomocniczą, aby zobaczyć, jak SQL jest generowany:
UWAGA : Ustaw flagę $ all na false, jeśli chcesz tylko ostatnie zapytanie SQL.
Trzymam tego rodzaju funkcje w klasie o nazwie DBH.php (skrót od Database Helper), aby móc wywoływać je z dowolnego miejsca takiego jak to:
Oto wynik, który otrzymuję:
Jeśli się zastanawiasz, używam Kinta do formatowania dd (). http://raveren.github.io/kint/
źródło
if($all == false)
? Dlaczego nie po prostuif(!$all)
W przypadku Laraver 4 jest to
źródło
Oto krótki fragment kodu JavaScript, który możesz wrzucić na szablon strony głównej. Tak długo, jak to jest uwzględnione, wszystkie zapytania będą przesyłane do konsoli Javascript przeglądarki. Drukuje je na łatwej do odczytania liście, ułatwiając przeglądanie witryny i sprawdzanie, jakie zapytania są wykonywane na każdej stronie.
Po zakończeniu debugowania po prostu usuń go z szablonu.
źródło
DB::getQueryLog()
zwraca tablicę, nie ma potrzeby otaczania jej znakiem „”.json_encode
przetłumaczy to odpowiednio.Laravel 5
Zauważ, że jest to podejście proceduralne , którego używam do szybkiego debugowania
w nagłówku użyj:
Dane wyjściowe będą wyglądać mniej więcej tak (domyślny plik dziennika to laravel.log ):
*** Wiem, że to pytanie określiło Laravela 3/4, ale ta strona pojawia się, gdy szukasz ogólnej odpowiedzi. Początkujący Laravel mogą nie wiedzieć, że istnieje różnica między wersjami. Ponieważ nigdy nie widzę
DD::enableQueryLog()
wzmianki w żadnej z odpowiedzi, które zwykle znajduję, może to być specyficzne dla Laravela 5 - być może ktoś może to skomentować.źródło
Możesz także nasłuchiwać zdarzeń zapytania za pomocą:
Zobacz informacje z dokumentów tutaj w sekcji Słuchanie zdarzeń związanych z zapytaniami
źródło
Korzystanie z dziennika zapytań nie daje rzeczywistego zapytania RAW, które jest wykonywane, zwłaszcza jeśli istnieją powiązane wartości. To jest najlepsze podejście do uzyskania surowej sql:
lub więcej zaangażowanych:
źródło
Jeśli używasz Laravel 5, musisz wstawić to przed zapytaniem lub na oprogramowaniu pośrednim:
źródło
Lub jako alternatywa dla profilera laravel 3 możesz użyć:
https://github.com/paulboco/profiler lub https://github.com/barryvdh/laravel-debugbar
źródło
w Laravel 4 można faktycznie używać Listener zdarzeń do zapytań do bazy danych.
Umieść ten fragment w dowolnym miejscu, np
start/global.php
. W. Wypisze zapytania do dziennika informacji (storage/log/laravel.log
).źródło
wstaw go do global.php, aby zarejestrować twoje zapytanie SQL.
źródło
Profiler Loic Sharma SQL obsługuje Laravel 4, właśnie go zainstalowałem. Instrukcje są wymienione tutaj . Kroki są następujące:
"loic-sharma/profiler": "1.1.*"
wymaganą sekcję w pliku composer.jsonphp composer.phar self-update
w konsoli.php composer.phar update loic-sharma/profiler
w konsoli `'Profiler\ProfilerServiceProvider',
tablicę dostawcy w app.php'Profiler' => 'Profiler\Facades\Profiler',
także tablicę aliasów w app.phpphp artisan config:publish loic-sharma/profiler
w konsoliźródło
Wydruk ostatniego zapytania
źródło
Jednowarstwowy L4
(które zapisują zapytanie):
$q=\DB::getQueryLog();dd(end($q));
źródło
Laravel 3
Innym sposobem na to jest:
Dla wszystkich wyników zapytania:
Ostatni wynik:
źródło
Aby uzyskać ostatnie wykonane zapytanie w laravel, użyjemy
DB::getQueryLog()
funkcji laravel, która zwróci wszystkie wykonane zapytania. Aby uzyskać ostatnie zapytanie, użyjemyend()
funkcji, która zwraca ostatnio wykonane zapytanie.Wziąłem odniesienie z http://www.tutsway.com/how-to-get-the-last-executed-query-in-laravel.php .
źródło
Jest to bardzo łatwy sposób, aby to zrobić, z zapytania laravel po prostu zmień nazwę dowolnej nazwy kolumny, wyświetli się błąd w zapytaniu .. :)
źródło