Laravel eloquent Lazy Vs. Eager Loaded

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');
}
}
class City extends Model 
{
protected $fillable = [
'name', 'code'
]; rumah

fungsi publik () {
return $this->hasMany('App\House');
}
}


Eager Loading

  • 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

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

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

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

  • 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

 

Comments

Popular posts from this blog

Cloud Computing Deployment Models: Technical know how.