Laravel eloquent Lazy Vs. Eager Loaded
- Get link
- X
- Other Apps
Eloquent (ORM) di laravel bekerja dengan luar biasa dan menyediakan cara yang sangat sederhana untuk mengakses database. Pada artikel ini kita akan memahami tentang apa itu lazy and bersemangat loading di Laravel fasih dan cara kerjanya di latar belakang.
#> Hubungan Fasih
Langkah pertama kita perlu mendefinisikan hubungan antar model. Dalam contoh ini saya akan menggunakan dua model, rumah dan kota . Rumah adalah milik satu kota, dan kota memiliki banyak rumah. Mari kita lihat hubungan dalam model Rumah :
class House extends Model
{
protected $fillable = [
'title', 'description', 'price'
];
fungsi publik city() {
return $this->belongsTo('App\City');
}
}
*** Catatan: untuk hubungan banyak ke satu (rumah adalah milik satu kota) nama fungsinya tunggal. [ fungsi publik kota() ]
class City extends Model
{
protected $fillable = [
'name', 'code'
]; rumah
fungsi publik () {
return $this->hasMany('App\House');
}
}
*** Catatan: untuk hubungan satu ke banyak (kota memiliki banyak rumah) nama fungsinya adalah jamak. [ rumah fungsi publik() ]
Eager Loading
ada yang perlu kita tahu tentang Eager loading, diantaranya adalah :
- kita harus tahu apa perbedaan Lazy loading dan Eager Loading di Laravel
- Eager loading dapat digunakan untuk memecahkan masalah query n+1
- Eager loading akan terasa manfaatnya ketika data sudah banyak
- untuk menggunakan eager loading menggunakan methode ->with()
Perbedaan Lazy Loading vs Eager Loading
//asumsi di table product_detail ada 16 row//Lazy loading$products = Product::all();
foreach ($products as $product) {
echo $product->productDetail->name;
}// total query 16
// tabel product : 1
// tabel product detail : 15//Eager Loading$products = Product::with([‘productDetail’])->get();foreach ($products as $product) {
echo $product->productDetail->name;
}// total query 2
// tabel product : 1
// tabel product detail : 1
dapat kita lihat bahwa eager loading memiliki total query yang lebih sedikit dibanding jika kita menggunakan lazy loading.
Penggunaan Eager Loading
//1. Multiple Relationship
Product::with([‘productDetail’, ‘productPhotos’, ‘categories’])->get();//2. Nested
Product::with([ ‘productPhotos.type’])->get();//3. Dengan Where
Product::with([ ‘productPhotos’ => function($query) {
$query->where(‘width’, ‘>’, 500);
}])->get();
Accessor
Accesor digunakan untuk memformat data yang sudah diambil dari database, untuk formatnya adalah getNamaAccessorAttribute
Contoh accessor dan cara mengaksesnya
public function getPresentPriceAttribute() {
return “Rp. ” . $this->price;
}//cara mengakses accesor
Product::find(1)->present_price;
di atas adalah contoh apabila kita ingin mendapatkan harga dan menambahkan string “Rp.”
Mutator
Mutator digunakan untuk memformat data yang akan disimpan, sedangkan untuk formatnya adalah setNamaMutatorAttribute
contoh mutator dan cara mengaksesnya
public function setNameAttribute($value) {
$this->attributes['name”] = strtolower($value);
}//cara mengakses mutator
$product = Product::find(1);
$product->name = ‘Hp Nokia Murah’;
contoh kapan ketika menggunakan mutator adalah ketika menyimpan sebuah password ke database, dengan menggunakan mutator kita dapat merubah plain text password ke dalam hash.
Scopes
Scopes digunakan untuk menambahkan konstrain pada query sehingga penulisan query pada eloquent lebih ringkas.
ada 3 jenis scopes yaitu Global Scopes, Anonymous Global Scopes dan Local Scopes
berikut ini contoh ketika kita menggunakan local scopes
public function scopePopular($query)
{
return $query->where(view', '>', 100);
}//pemanggilan scopes
Product::popular()->get();
Pertanyaan yang mungkin timbul
dari pembahasan tentang eloquent & relationship mungkin anda akan bertanya
- Kapan sebaiknya menggunakan Lazy Loading, Eager Lazy Loading (load) dan Eager Loading ?
- Bagaimana jika dalam satu model ada nama relasi dan scope yang sama ?
relasi dulu yang dipanggil, kemudian scope - Bagaimana jika dalam satu model ada nama kolom, accessor dan relasi yang sama ?
accessor dulu yang dipanggil, nama kolom, relasi - Kapan sebaiknya menggunakan Eloquent dan Query Builder biasa ?Kalau ketika pakai eloquent ribet, maka pakai query builder
- Get link
- X
- Other Apps
Comments
Post a Comment