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

98 Kontribusi 50 Poin

Diperbarui 1 tahun 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

2695 Kontribusi 2139 Poin

Dipost 1 tahun 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

120 Kontribusi 40 Poin

Dipost 1 tahun yang lalu

Login untuk ikut Jawaban