Laravel - Basic Query

Basic Query

Lazy Loading vs Eager Loading

Lazy loading ada sebuah metode untuk men-delay proses load data atau resource sampai data tersebut benar-benar dibutuhkan sedangkan Eager loading adalah sebuah metode untuk me-load data atau resource ketika code dijalankan.

Untuk prakteknya kita coba buka Controller PostsController , lalu kita panggil fungsi DB

use Illuminate\Support\Facades\DB;

 

Pada fungsi index kita tambahkan sintak seperti ini, pada fungsi ini kita akan menggunakan lazy loading untuk mengambil data dari blogpost

public function index()

{

    DB::connection()->enableQueryLog();

 

    $posts = BlogPost::all();

 

    foreach ($posts as $post) {

        foreach ($post->comments as $comment) {

            echo $comment->content;

        }

    }

 

    dd(DB::getQueryLog());

 

    $posts = BlogPost::all();

    return view('posts.index', ['posts'=> $posts]);

}

 

 Pada browser buka endpoint /posts misal (http://localhost:8000/posts)


Masih pada fungsi Index kita coba rubah sedikit pada fungsinya, merubah dari lazy loading menjadi eager loading

public function index()

{

    DB::connection()->enableQueryLog();

 

    // $posts = BlogPost::all();

    $posts = BlogPost::with('comments')->get();

 

    foreach ($posts as $post) {

        foreach ($post->comments as $comment) {

            echo $comment->content."<br>";

        }

    }

 

    dd(DB::getQueryLog());

 

    $posts = BlogPost::all();

    return view('posts.index', ['posts'=> $posts]);

}

 Buka kembali browser dan refresh


Kesimpulan : Jika kita lihat perbedaan antara lazy loading dan eager loading , untuk lazy loading dia menjalankan beberapa query ke Database sedangkan untuk eager loading dia hanya melakukan 2 query saja ke database

Query Relationship

1.       Query BlogPost yang hanya memiliki comment

$posts = BlogPost::has('comments')->get();


2.       Query BlogPost yang hanya memiliki 2 comment atau lebih

$posts = BlogPost::has('comments', '>=', 2)->get();

3.       Query BlogPost yang hanya memiliki comment yang memiliki content ‘kedua’

$post = BlogPost::whereHas('comments', function($query) {$query->where('content', 'like', '%kedua%'); })->get();


4.       Query BlogPost yang hanya memiliki comment yang memiliki content ‘Vivas’

$post = BlogPost::whereHas('comments', function($query) {$query->where('content', 'like', '%vivas%'); })->get();


5.       Query BlogPost yang tidak memiliki comment

$posts = BlogPost::doesntHave('comments')->get();

               

6.       Query BlogPost yang memiliki comment dan content dari comment tidak mengandung kata ‘kedua’

$post = BlogPost::whereDoesntHave('comments', function($query) { $query->where('content', 'like', '%kedua%'); })->get();

 

7.       Query BlogPost dengan jumlah comment yang dimilikinya.

$post = BlogPost::withCount('comments')->get();

Query di atas akan menambahkan satu field di object BlogPost dengan nama comments_count.



Next Post Previous Post
No Comment
Add Comment
comment url