Aplikasi Laravel yang sangat bergantung pada interaksi database menggunakan Laravel Eloquent sering menimbulkan masalah kinerja.
Untuk meningkatkan kinerja aplikasi Kita, Kita harus memfaktorkan ulang query Kita dan mengawasi query yang memakan memori dengan menggunakan ORM seperti Laravel Eloquent.
Dalam posting ini, saya akan memandu Kita melalui contoh yang sangat sederhana untuk memfaktorkan ulang query dan meningkatkan waktu respons basis data.
Problem
Perhatikan contoh script di bawah ini, yang menggunakan tabel Produk dan Kategori untuk mengembalikan nama kategori.
$product = Product::where('id', $productId)->first();
$productCategory = Category::where('id', $product->category_id)->pluck('name')->first();
Contoh script di atas cukup sederhana untuk dipahami tetapi menggunakan dua panggilan terpisah ke database. Kueri pertama harus kembali sebelum query kedua dapat ditrigger.
Solusi
Mari kita perbaiki contoh script ini dengan menggabungkan kedua request menjadi satu query.
$productCategory = Product::where('id', $productId)
->leftJoin('category', 'product.category', '=', 'category.id')
->select('product.id','category.name')->first();
Sekarang, apa yang baru saja kita lakukan di atas?
- Pertama, kita menargetkan produk berdasarkan
productId query yang sama persis dengan yang pertama.
- Selanjutnya, kita menggabungkan hasil dengan tabel kategori menggunakan
category ke kategori produk . Query pertama mengambil model Produk yang memberi kita akses ke atribut kategori.
- Kita memilih id produk dan nama kategori.
- Akhirnya, kita menggunakan
first()metode, yang memastikan bahwa setelah menemukan satu kategori yang memenuhi persyaratan, itu akan mengembalikan nama kategori secara instan.
Lev Yasin
Instruktur Web Programming Mataweb
Sangat tertarik dengan dunia Pemrograman Web & Mobile, saat ini fokus pada bagian Backend Web Developer, menggunakan PHP sebagai bahasa pemrograman utama, biasanya saya menggunakan Laravel.