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

avatar yuxxeun
@yuxxeun

88 Kontribusi 47 Poin

Diperbarui 3 bulan yang lalu

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(...)
avatar hilmanski
@hilmanski

2659 Kontribusi 2130 Poin

Dipost 3 bulan yang lalu

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:

  1. WHERE Aktif = Ya harus diletakkan setelah with(), bukan didalam closure function.

  2. 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.

  3. 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'.

avatar adamajalah27
@adamajalah27

119 Kontribusi 39 Poin

Dipost 3 bulan yang lalu

Login untuk ikut Jawaban