Rumah >rangka kerja php >Laravel >masa pertanyaan persatuan laravel

masa pertanyaan persatuan laravel

王林
王林asal
2023-05-29 10:03:37564semak imbas

Laravel ialah rangka kerja PHP yang sangat popular dengan ciri yang kaya dan API yang mudah digunakan. Antaranya, Eloquent ORM ialah salah satu komponen pangkalan datanya yang paling berkuasa, yang boleh digunakan untuk membuat pertanyaan dan mengaitkan dengan mudah.

Walau bagaimanapun, apabila kami melakukan pertanyaan berkaitan yang kompleks, kami akan mendapati bahawa bilangan pertanyaan menjadi sangat besar, terutamanya apabila menggunakan gelung. Ini bukan sahaja akan menjejaskan prestasi pertanyaan, tetapi juga boleh menyebabkan pengecualian sambungan pangkalan data.

Jadi, bagaimanakah kita boleh mengurangkan bilangan pertanyaan berkaitan dalam Laravel? Di bawah, artikel ini akan memberikan beberapa penyelesaian.

  1. Pemuatan malas

Apabila melakukan pertanyaan berkaitan, kami boleh menggunakan fungsi pemuatan malas Laravel, yang akan membuat pertanyaan hanya apabila model berkaitan diperlukan.

Pemuatan malas menggunakan kaedah ajaib __get(), jadi selagi ia dipanggil pada model yang berkaitan, pertanyaan berkaitan akan dicetuskan.

Contohnya:

$users = User::all();

foreach ($users as $user) {

echo $user->profile->name;

}

Jika kami menggunakan $users->profile terus dalam gelung foreach, maka dalam setiap gelung, pertanyaan berkaitan akan dilaksanakan, yang akan menghasilkan sejumlah besar pertanyaan, jadi kami boleh menggunakan pemuatan malas untuk mengoptimumkannya .

$users = Pengguna::with('profile')->get();

foreach ($users as $user) {

echo $user->profile->name;

}

Apabila menggunakan kaedah with() untuk pramuat model yang berkaitan, pemuatan malas akan didayakan secara automatik dan pertanyaan hanya akan dilakukan apabila model yang berkaitan perlu digunakan.

  1. Eager Loading

Selagi kami secara manual memanggil lazy loading, jika kami tidak melakukan pemeriksaan menyeluruh terhadap kod, masih akan ada pertanyaan berulang, jadi a lebih teliti Penyelesaiannya adalah dengan menggunakan Eager Loading, yang memuatkan semua model berkaitan yang diperlukan sekaligus.

Contohnya:

$users = Pengguna::with('profile', 'posts')->get();

foreach ($users as $ pengguna ) {

echo $user->profile->name;

foreach ($user->posts as $post) {
    echo $post->title;
}

}

Apabila menggunakan kaedah with() untuk memuatkan berbilang model berkaitan pada masa yang sama, berbilang pertanyaan SQL akan dilaksanakan jika kita hanya perlu menggunakan salah satu daripada model yang berkaitan, maka kaedah ini Hanya bukan pilihan terbaik.

  1. pilih mengisytiharkan medan berkaitan

Dalam Eloquent, kita boleh menggunakan kaedah pilih untuk melakukan beberapa penapisan pada model dan menentukan lajur khusus yang kita perlukan dan model yang berkaitan juga sama.

Contohnya:

$users = User::with(['profile' => function ($query) {

$query->select('user_id', 'name');

}])->get ( );

foreach ($users as $user) {

echo $user->profile->name; // 只会查询'profile'表中的'user_id'和'name'列

}

Dalam contoh ini, dengan menyatakan kaedah pilih() untuk mengeluarkan lajur yang anda perlukan, anda boleh Eloquent ORM hanya menanyakan beberapa lajur data tertentu pada satu masa Ini adalah cara yang baik untuk menanyakan data khusus dengan cepat Ia juga mengurangkan bilangan pertanyaan tambahan untuk kami, jadi kami boleh menggunakan kaedah ini untuk mengehadkan pertanyaan model yang berkaitan.

  1. Gunakan sertai untuk pertanyaan berkaitan

Selain berurusan dengan model yang berkaitan, dalam beberapa kes tertentu, pertanyaan sertai mungkin lebih cekap daripada pertanyaan berkaitan Eloquent.

Contohnya:

$users = DB::table('users')

->join('profiles', 'users.id', '=', 'profiles.user_id')
->join('posts', 'users.id', '=', 'posts.user_id')
->select('users.name', 'profiles.age', 'posts.title')
->get();

foreach ($users as $user) {

echo $user->name;
echo $user->age;
echo $user->title;

}

Walaupun pertanyaan sertai meningkatkan kerumitan dan kebolehselenggaraan pernyataan SQL, berbanding dengan Eloquent ORM, pertanyaan sertai boleh mengoptimumkan prestasi pertanyaan dengan lebih baik.

Ringkasan

Kaedah di atas adalah teknik berkesan yang boleh kita gunakan untuk mengurangkan bilangan pertanyaan berkaitan dalam Laravel. Secara umum, kita boleh menggunakan pramuat dan pemuatan malas untuk mengoptimumkan prestasi pertanyaan dan mengelakkan pertanyaan berulang. Untuk beberapa pertanyaan khusus dan kompleks, kami boleh mempertimbangkan untuk menggunakan pertanyaan penyertaan untuk mendapatkan hasil yang lebih cekap.

Akhir sekali, tidak kira pendekatan yang kami ambil, mengoptimumkan pertanyaan sentiasa penting, ia boleh meningkatkan prestasi aplikasi kami dengan banyak dan memendekkan masa respons kami.

Atas ialah kandungan terperinci masa pertanyaan persatuan laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:sintaks pertanyaan laravelArtikel seterusnya:sintaks pertanyaan laravel