Postingan lainnya
Filter pada Laravel
Saya ingin menampilkan data yang mana hanya memiliki nilai Ya dalam kolom Aktif dengan Laravel, kodenya kira-kira begini:
$karyawans = KaryawanPribadi::where('NamaLengkap', 'like', '%' . $this->search . '%')
->orWhere('NikKaryawan', 'like', '%' . $this->search . '%')
->with('bagian')
->where(function ($query) {
$query->where('Aktif', '=', ['Ya']);
})
->paginate(10);
Sayangnya data masih meuncul semua baik yang aktif maupun tidak.
Kolom aktif sendiri bertipe data enum, berisi nilai Ya dan Tidak
2 Jawaban:
Jawaban Terpilih
Mungkin masalahnya karena kamu mencampurkan orWhere, disana, sehingga masuk or nya.
Coba dikelompokkan dulu where sebelumnya
KaryawanPribadi::where(function ($query) {
$query->where('NamaLengkap', 'like', '%' . $this->search . '%')
->orWhere('NikKaryawan', 'like', '%' . $this->search . '%');
})->where(...)
Tanggapan
Terima kasih, sudah berhasil saya modif seperti ini:
$karyawans = KaryawanPribadi::where(function ($query) {
$query->where('NamaLengkap', 'like', '%' . $this->search . '%')
->orWhere('NikKaryawan', 'like', '%' . $this->search . '%');
})->whereHas('bagian', function ($query) {
$query->where('Aktif', 'Ya');
})->paginate(10);
$karyawans = KaryawanPribadi::where('NamaLengkap', 'like', '%' . $this->search . '%')
->orWhere('NikKaryawan', 'like', '%' . $this->search . '%')
->with('bagian')
->where('Aktif', '=', 'Ya')
->paginate(10);
Beberapa hal yang perlu diperhatikan:
-
WHERE Aktif = Ya harus diletakkan setelah with(), bukan didalam closure function.
-
Operator perbandingan yang digunakan adalah = bukan IN, karena hanya perlu dicek apakah nilainya sama dengan 'Ya'. IN digunakan untuk mengecek apakah nilai terdapat dalam array.
-
Nilai Aktif langsung dicek dengan nilai string 'Ya', tidak perlu pakai array.
Dengan menggunakan kode di atas, query hanya akan mengambil data dengan nilai Aktif sama dengan 'Ya'.