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]);
}
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]);
}
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.