Bagaimana saya bisa mengambil kueri SQL yang dieksekusi mentah di Laravel 3/4 menggunakan Laravel Query Builder atau Eloquent ORM?
Misalnya, sesuatu seperti ini:
DB::table('users')->where_status(1)->get();
Atau:
(posts (id, user_id, ...))
User::find(1)->posts->get();
Kalau tidak, paling tidak bagaimana cara saya menyimpan semua permintaan yang dieksekusi ke laravel.log?
Jawaban:
Laravel 4+
Di Laravel 4 dan yang lebih baru, Anda harus menelepon
DB::getQueryLog()
untuk mendapatkan semua kueri berlari.Atau Anda dapat mengunduh paket profiler. Saya akan merekomendasikan barryvdh / laravel-debugbar , yang cukup rapi. Anda dapat membaca instruksi tentang cara menginstal di repositori mereka .
Catatan untuk pengguna Laravel 5: Anda harus menelepon
DB::enableQueryLog()
sebelum menjalankan kueri. Baik tepat di atas garis yang menjalankan kueri atau di dalam middleware.Laravel 3
Di Laravel 3, Anda bisa mendapatkan kueri yang dieksekusi terakhir dari
Eloquent
model yang memanggil metode statislast_query
diDB
kelas.Namun, ini mengharuskan Anda mengaktifkan
profiler
opsi diapplication/config/database.php
. Atau Anda bisa, seperti disebutkan @dualed, mengaktifkanprofiler
opsi, diapplication/config/application.php
atau panggilanDB::profile()
untuk mendapatkan semua pertanyaan berjalan dalam permintaan saat ini dan waktu eksekusi mereka.sumber
ErrorException
: Peringatan:call_user_func_array()
mengharapkan parameter 1 menjadi panggilan balik yang valid, kelasIlluminate\Database\MySqlConnection
tidak memiliki metodegetQueryList
.getQueryLog
. Perbaiki sekarang. Terima kasih!Anda dapat mengaktifkan " Profiler " di Laravel 3 dengan mengatur
Di Anda
application/config/application.php
danapplication/config/database.php
Ini memungkinkan bilah di bagian bawah setiap halaman. Salah satu fiturnya adalah daftar pertanyaan yang dieksekusi dan berapa lama masing-masing diperlukan.
sumber
Untuk Eloquent Anda bisa melakukan:
Tetapi Anda harus menghapus bagian "-> get ()" dari kueri Anda.
sumber
Saya akan merekomendasikan menggunakan Clockwork ekstensi Chrome dengan paket Laravel https://github.com/itsgoingd/clockwork . Mudah dipasang dan digunakan.
sumber
Karena profiler belum keluar di Laravel 4 , saya telah membuat fungsi pembantu ini untuk melihat SQL yang dihasilkan:
CATATAN : Atur flag $ all ke false jika Anda hanya ingin query SQL terakhir.
Saya menyimpan fungsi semacam ini di kelas yang disebut DBH.php (kependekan dari Database Helper) sehingga saya dapat memanggilnya dari mana saja seperti ini:
Ini adalah output yang saya dapatkan:
Jika Anda bertanya-tanya, saya menggunakan Kint untuk format dd (). http://raveren.github.io/kint/
sumber
if($all == false)
? Mengapa tidak sederhanaif(!$all)
Untuk Laraver 4 itu
sumber
Berikut ini cuplikan singkat Javascript yang dapat Anda lemparkan ke templat halaman master Anda. Selama ini dimasukkan, semua permintaan akan ditampilkan ke Javascript Console browser Anda. Ini mencetaknya dalam daftar yang mudah dibaca, membuatnya mudah untuk menelusuri situs Anda dan melihat permintaan apa yang dieksekusi pada setiap halaman.
Setelah selesai debugging, hapus saja dari template Anda.
sumber
DB::getQueryLog()
mengembalikan array, tidak perlu mengelilinginya dengan "".json_encode
akan menerjemahkannya sesuai.Laravel 5
Perhatikan bahwa ini adalah pendekatan prosedural , yang saya gunakan untuk debugging cepat
di tajuk Anda, gunakan:
Outputnya akan terlihat seperti ini (file log default adalah laravel.log ):
*** Saya tahu pertanyaan ini menentukan Laravel 3/4 tetapi halaman ini muncul saat mencari jawaban umum. Pemula untuk Laravel mungkin tidak tahu ada perbedaan antara versi. Karena saya tidak pernah melihat yang
DD::enableQueryLog()
disebutkan dalam salah satu jawaban yang biasanya saya temukan, itu mungkin khusus untuk Laravel 5 - mungkin seseorang dapat mengomentari itu.sumber
Anda juga dapat mendengarkan acara permintaan menggunakan ini:
Lihat informasi dari dokumen di sini di bawah Acara Mendengarkan Untuk Permintaan
sumber
Menggunakan log kueri tidak memberi Anda kueri RAW aktual yang dieksekusi, terutama jika ada nilai terikat. Ini adalah pendekatan terbaik untuk mendapatkan sql mentah:
atau lebih terlibat:
sumber
Jika Anda menggunakan Laravel 5, Anda harus memasukkan ini sebelum kueri atau di middleware:
sumber
Atau sebagai alternatif untuk profiler laravel 3 yang dapat Anda gunakan:
https://github.com/paulboco/profiler atau https://github.com/barryvdh/laravel-debugbar
sumber
di Laravel 4 Anda sebenarnya dapat menggunakan Event Listener untuk kueri basis data.
Letakkan cuplikan ini di mana saja, misalnya di
start/global.php
. Ini akan menulis pertanyaan ke log info (storage/log/laravel.log
).sumber
letakkan di global.php maka akan mencatat kueri sql Anda.
sumber
Profiler Loic Sharma SQL tidak mendukung Laravel 4, saya baru saja menginstalnya. Petunjuknya tercantum di sini . Langkah-langkahnya adalah sebagai berikut:
"loic-sharma/profiler": "1.1.*"
bagian yang diperlukan di composer.jsonphp composer.phar self-update
di konsol.php composer.phar update loic-sharma/profiler
di konsol juga `'Profiler\ProfilerServiceProvider',
array penyedia di app.php'Profiler' => 'Profiler\Facades\Profiler',
juga array aliasses di app.phpphp artisan config:publish loic-sharma/profiler
di konsolsumber
Cetak kueri terakhir
sumber
L4 satu-liner
(yang menulis kueri):
$q=\DB::getQueryLog();dd(end($q));
sumber
Laravel 3
Cara lain untuk melakukan ini adalah:
Untuk semua hasil Pertanyaan:
Untuk Hasil Terakhir:
sumber
Untuk mendapatkan kueri yang dieksekusi terakhir di laravel, Kami akan menggunakan
DB::getQueryLog()
fungsi laravel untuk mengembalikan semua kueri yang dieksekusi. Untuk mendapatkan kueri terakhir kita akan menggunakanend()
fungsi yang mengembalikan kueri yang dieksekusi terakhir.Saya telah mengambil referensi dari http://www.tutsway.com/how-to-get-the-last-executed-query-in-laravel.php .
sumber
Ada cara yang sangat mudah untuk melakukannya, dari permintaan laravel Anda cukup ganti nama kolomnya, itu akan menunjukkan kesalahan pada permintaan Anda .. :)
sumber