Cara menggunakan whereHas di Laravel beserta contoh

Cara menggunakan whereHas di Laravel beserta contoh

Apa itu whereHas?

whereHas adalah method dalam Laravel Eloquent yang memungkinkan Anda untuk memfilter hasil query berdasarkan keberadaan relationship. Dengan kata lain, Anda dapat mengambil data hanya jika relationship yang terkait dengan data tersebut memenuhi kondisi tertentu.

Kapan Menggunakan whereHas?

Anda dapat menggunakan whereHas ketika Anda ingin:

  • Mengambil data yang memiliki relationship dengan data lain.
  • Memfilter data berdasarkan kondisi pada relationship.
  • Melakukan query yang lebih kompleks melibatkan relationship.

Contoh Penggunaan

Misalkan Anda memiliki model User dan Post. Setiap user dapat memiliki banyak post. Anda ingin mengambil semua user yang memiliki setidaknya satu post yang judulnya mengandung kata "Laravel". Berikut adalah contoh penggunaannya:

use App\Models\User;

$users = User::whereHas('posts', function ($query) {
    $query->where('title', 'like', '%Laravel%');
})->get();

Penjelasan:

  • User::whereHas('posts', ...): Memulai query untuk model User dan menentukan bahwa kita ingin memfilter berdasarkan relationship posts.
  • function ($query): Sebuah closure yang menerima query builder untuk relationship posts.
  • $query->where('title', 'like', '%Laravel%'): Kondisi yang harus dipenuhi oleh relationship posts. Dalam hal ini, judul post harus mengandung kata "Laravel".
  • ->get(): Menjalankan query dan mengembalikan collection dari model User yang memenuhi kondisi.

Contoh Lain

Anda juga dapat menggunakan whereHas dengan beberapa kondisi dan relationship yang berbeda. Misalkan Anda ingin mengambil semua user yang memiliki setidaknya satu post yang judulnya mengandung kata "Laravel" dan kategori post tersebut adalah "Tutorial". Berikut adalah contoh penggunaannya:

use App\Models\User;

$users = User::whereHas('posts', function ($query) {
    $query->where('title', 'like', '%Laravel%')
          ->whereHas('category', function ($query) {
              $query->where('name', 'Tutorial');
          });
})->get();

Kesimpulan

whereHas adalah fitur yang sangat berguna dalam Laravel Eloquent untuk melakukan query yang melibatkan relationship. Dengan memahami cara menggunakannya, Anda dapat membangun query yang lebih efisien dan kompleks sesuai dengan kebutuhan aplikasi Anda.

Semoga penjelasan ini bermanfaat! Jika Anda memiliki pertanyaan lebih lanjut, jangan ragu untuk bertanya.