Cara Menggunakan Subqueries dalam Laravel untuk Peningkatan Prestasi
Dalam Laravel, subqueries menawarkan pendekatan yang berkuasa untuk meningkatkan kecekapan pertanyaan tertentu. Apabila anda perlu mendapatkan semula data berdasarkan hasil yang diperoleh daripada pertanyaan lain, subkueri boleh digunakan untuk mencapai ini. Pendekatan ini terbukti amat berguna apabila operasi gabungan kurang sesuai atas sebab prestasi.
Pertimbangkan contoh pertanyaan berikut:
SELECT `p`.`id`, `p`.`name`, `p`.`img`, `p`.`safe_name`, `p`.`sku`, `p`.`productstatusid` FROM `products` p WHERE `p`.`id` IN ( SELECT `product_id` FROM `product_category` WHERE `category_id` IN ('223', '15') ) AND `p`.`active`=1
Pertanyaan ini mendapatkan semula maklumat produk (p.id, p.name , dsb.) daripada jadual produk (p), di mana lajur p.id sepadan dengan nilai yang wujud dalam jadual kategori_produk (product_id) untuk ID kategori tertentu (223 dan 15). Selain itu, pertanyaan memastikan bahawa lajur aktif dalam jadual produk ditetapkan kepada 1.
Menggunakan subkueri untuk mencapai ini, dan bukannya operasi gabungan, memberikan anda prestasi yang dipertingkatkan. Begini cara anda boleh melaksanakannya dalam Laravel:
Products::whereIn('id', function($query){ $query->select('paper_type_id') ->from(with(new ProductCategory)->getTable()) ->whereIn('category_id', ['223', '15']) ->where('active', 1); }) ->get();
Kod ini mentakrifkan pertanyaan Laravel Eloquent, tempat model Produk digunakan. Kaedah whereIn digunakan untuk menentukan bahawa lajur id produk harus sepadan dengan nilai yang terdapat dalam hasil subkueri. Subquery dicipta dengan mentakrifkan fungsi tanpa nama yang melaksanakan pertanyaan untuk memilih paper_type_id daripada jadual product_category. Pertanyaan juga menapis hasil berdasarkan nilai category_id (223 dan 15) dan memastikan aktif ditetapkan kepada 1. Dengan memanfaatkan subkueri, pendekatan ini memastikan pelaksanaan yang cekap, menjadikannya ideal untuk senario yang prestasinya kritikal.
Atas ialah kandungan terperinci Bagaimanakah Laravel Subqueries Boleh Meningkatkan Prestasi Pertanyaan Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!