Laravel ialah rangka kerja PHP yang sangat popular yang memberikan kami cara yang mudah untuk mengurus akses pangkalan data dan pertanyaan. Walau bagaimanapun, dalam sesetengah senario perniagaan yang memerlukan penyesuaian, kami perlu melihat dan menyahpepijat penyataan SQL yang dihasilkan secara manual untuk memahami dengan lebih baik proses pengendalian program dan mengoptimumkan prestasi SQL. Artikel ini akan memperkenalkan secara terperinci cara mendapatkan pernyataan SQL dalam rangka kerja Laravel.
1. Pembina pertanyaan Laravel
Dalam Laravel, kita boleh menggunakan pembina pertanyaan untuk mendapatkan data daripada pangkalan data. Pembina pertanyaan ialah lapisan abstraksi utama pangkalan data dalam Laravel Ia menyediakan satu siri API untuk membina dan melaksanakan pernyataan pertanyaan, yang sangat mudah digunakan. Sebagai contoh, anda boleh menggunakan kod berikut untuk mendapatkan rekod dalam jadual data:
$users = DB::table('users')->get();
Gunakan pembina pertanyaan untuk mendapatkan jumlah data yang besar dengan cepat dan mudah. Walau bagaimanapun, kaedah ini tidak menyediakan pernyataan SQL yang akhirnya kami laksanakan Pada masa ini, kami perlu menggunakan beberapa alat tambahan untuk mendapatkan pernyataan SQL yang dijana.
2. Dayakan log pertanyaan
Laravel menyediakan cara yang sangat mudah untuk mendapatkan penyataan SQL yang dilaksanakan, iaitu untuk mendayakan log pertanyaan. Log pertanyaan pangkalan data Laravel ialah mekanisme yang merekodkan semua pernyataan pertanyaan yang dilaksanakan, termasuk maklumat seperti masa pelaksanaan dan keputusan pelaksanaan. Semasa pembangunan, mendayakan log pertanyaan boleh memudahkan kami menyahpepijat atur cara dan mengoptimumkan prestasi SQL.
Kaedah untuk mendayakan log pertanyaan adalah sangat mudah, anda hanya perlu menetapkannya dalam fail konfigurasi Laravel config/database.php
. Dalam fail konfigurasi lalai Laravel, log pertanyaan dimatikan secara lalai Anda boleh mengubah suai fail konfigurasi dengan menukar 'log' => 'false'
kepada 'log' => 'true'
untuk mendayakan log pertanyaan. Fail konfigurasi yang diubah suai adalah seperti berikut:
'connections' => [ 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, 'log' => true, //开启查询日志 ], ],
Selepas mendayakan log pertanyaan, Laravel akan menyimpan log pertanyaan dalam fail storage/logs/laravel.log
. Kita boleh mendapatkan pernyataan SQL yang dilaksanakan dengan melihat fail ini Kita boleh mendapatkan log pertanyaan melalui kod berikut dalam konsol Laravel atau alat penyahpepijatan:
DB::connection()->enableQueryLog(); // 在这里书写需要查询的代码 dd(DB::getQueryLog());
Kod di atas akan membolehkan log pertanyaan dan mengeluarkan log pertanyaan. . Semasa pelaksanaan program, panggil kod di atas untuk mendapatkan log pertanyaan, dan anda boleh melihat pernyataan SQL yang dilaksanakan oleh program dalam masa nyata.
Perlu diambil perhatian bahawa mendayakan log pertanyaan akan memberi kesan tertentu pada prestasi sistem, jadi log pertanyaan tidak seharusnya didayakan sepanjang masa dalam persekitaran pengeluaran. Selain itu, log pertanyaan Laravel hanya didayakan dalam persekitaran pembangunan secara lalai, jadi anda perlu menetapkannya secara manual dalam fail konfigurasi untuk mendayakan log pertanyaan.
3. Gunakan fasad DB
Laravel juga menyediakan cara lain untuk mendapatkan pernyataan SQL yang dilaksanakan-menggunakan fasad DB. Fasad DB menyediakan satu siri kaedah statik yang boleh membuat dan melaksanakan pernyataan pertanyaan dengan mudah dan mendapatkan pernyataan SQL yang dilaksanakan. Sebagai contoh, perkara yang sama adalah untuk mendapatkan data dalam jadual pengguna:
$users = DB::select('select * from users');
Selepas melaksanakan kod di atas, fasad DB akan menjana pernyataan select
dan melaksanakannya untuk mendapatkan rekod dalam jadual data. Walau bagaimanapun, kaedah ini juga tidak menyediakan antara muka untuk melihat secara langsung pernyataan SQL yang dilaksanakan. Walau bagaimanapun, fasad DB menyediakan kaedah yang lebih mudah untuk mendapatkan pernyataan SQL yang dihasilkan Kaedahnya adalah seperti berikut:
$sql = DB::getQueryLog();
Kaedah ini akan mengembalikan tatasusunan yang mengandungi semua pertanyaan ini dilaksanakan melalui muka hadapan DB. Selepas mendapatkan tatasusunan, anda boleh membaca atribut query
setiap log untuk melihat pernyataan SQL yang dilaksanakan setiap kali.
4. Gunakan model ORM
Dalam Laravel, model ORM ialah kaedah akses data berorientasikan objek Ia memetakan rekod jadual data ke dalam objek untuk memudahkan operasi pangkalan data kami . Model ORM ialah enkapsulasi peringkat tinggi Laravel bagi pembina pertanyaan Menggunakan model ORM menjadikannya lebih mudah untuk mengakses pangkalan data, dan apabila menanyakan jadual data melalui perkaitan model, pernyataan pertanyaan SQL yang dihasilkan adalah lebih intuitif dan lebih mudah untuk nyahpepijat.
Dalam proses menggunakan model ORM, kita juga boleh mendapatkan pernyataan SQL yang dijana. Laravel menyediakan kaedah yang dipanggil toSql(), yang boleh mengeluarkan pernyataan pertanyaan model. Sebagai contoh, kita perlu menggunakan model ORM untuk mendapatkan data dalam jadual pengguna:
$users = AppModelsUser::all();
Antaranya, User
ialah model ORM yang kami takrifkan Gunakan kaedah all()
untuk mendapatkan semua rekod dalam jadual yang sepadan dengan model. Kita boleh mendapatkan pernyataan SQL yang dijana oleh model dengan memanggil kaedah toSql()
. Seperti yang ditunjukkan di bawah:
$sql = AppModelsUser::all()->toSql();
Kod di atas akan mengembalikan pernyataan pertanyaan yang diproses oleh model ORM. Perlu diingatkan bahawa kaedah toSql() hanya boleh menggantikan ruang letak dalam model dalam pernyataan SQL yang dijana dan tidak boleh melaksanakan pernyataan SQL Oleh itu, kaedah ini hanya boleh digunakan untuk melihat pernyataan SQL yang dijana dan tidak boleh digunakan sebagai a kaedah pertanyaan.
Ringkasan
Artikel ini memperkenalkan cara mendapatkan penyataan SQL yang dilaksanakan dengan mudah dalam rangka kerja Laravel. Dengan mendayakan log pertanyaan, menggunakan fasad DB dan model ORM serta kaedah lain, anda boleh mendapatkan atau melihat SQL yang dilaksanakan oleh program, yang memudahkan kami untuk nyahpepijat dan mengoptimumkan prestasi program. Sudah tentu, kaedah yang berbeza mempunyai senario yang boleh digunakan, dan anda perlu memilih kaedah yang paling sesuai mengikut senario tertentu. Sebagai contoh, dalam persekitaran pembangunan, anda boleh mendayakan log pertanyaan untuk melihat pelaksanaan program apabila menggunakan model ORM untuk akses data, kaedah toSql() boleh melihat penyata SQL yang dijana dengan mudah. Dalam projek sebenar, pembangun boleh menggunakan kaedah ini secara fleksibel untuk meningkatkan kecekapan pertanyaan SQL dan prestasi program.
Atas ialah kandungan terperinci Bagaimana untuk mendapatkan sql dalam laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!