Postingan lainnya
Buku Ini Koding!
Baru!
Buku ini akan jadi teman perjalanan kamu belajar sampai dapat kerjaan di dunia programming!
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'.