Saat menggunakan ->get()
Anda tidak bisa hanya menggunakan salah satu di bawah ini:
if (empty($result)) { }
if (!$result) { }
if ($result) { }
Karena jika Anda dd($result);
akan melihat contoh Illuminate\Support\Collection
selalu dikembalikan, bahkan ketika tidak ada hasil. Pada dasarnya apa yang Anda periksa adalah $a = new stdClass; if ($a) { ... }
yang akan selalu kembali benar.
Untuk menentukan apakah ada hasil yang dapat Anda lakukan salah satu dari yang berikut:
if ($result->first()) { }
if (!$result->isEmpty()) { }
if ($result->count()) { }
if (count($result)) { }
Anda juga bisa menggunakan ->first()
alih-alih ->get()
pada pembuat kueri yang akan mengembalikan instance dari model yang ditemukan pertama kali, atau null
sebaliknya. Ini berguna jika Anda membutuhkan atau hanya mengharapkan satu hasil dari database.
$result = Model::where(...)->first();
if ($result) { ... }
Catatan / Referensi
Informasi Bonus
Perbedaan Kumpulan dan Pembuat Kueri dapat sedikit membingungkan bagi pendatang baru Laravel karena nama metode sering sama di antara keduanya. Untuk alasan itu bisa membingungkan untuk mengetahui apa yang sedang Anda kerjakan. Query Builder pada dasarnya membangun kueri sampai Anda memanggil metode di mana ia akan mengeksekusi kueri dan menekan database (mis. Ketika Anda memanggil metode tertentu seperti ->all()
->first()
->lists()
dan yang lain). Metode-metode itu juga ada pada Collection
objek, yang bisa dikembalikan dari Pembuat Kueri jika ada beberapa hasil. Jika Anda tidak yakin kelas apa yang sedang Anda kerjakan, coba lakukan var_dump(User::all())
dan bereksperimen untuk melihat kelas apa yang sebenarnya dikembalikan (dengan bantuanget_class(...)
). Saya sangat menyarankan Anda memeriksa kode sumber untuk kelas Koleksi, sangat sederhana. Kemudian periksa Pembuat Kueri dan lihat persamaan dalam nama fungsi dan cari tahu kapan itu benar-benar menyentuh database.
first()
, hasilnya berbeda dariget()
, yang dapat diperiksa dengan!$result
hasil kosongnull
Model::first()
- itu sebenarnya bekerja pada metode 'pertama` pembuat kueri dan BUKAN koleksi, oleh karena itu akan memilih yang pertama dari database - namunModel::get()
akan mengembalikan instance dari Illuminate \ Support \ Koleksi jadi jika Anda melakukannya$r = Model::get()
dan kemudian$r->first()
akan memilih item pertama dalam koleksi itu.count($result)
berhasil; menambahkan detail itu akan menjadi peningkatan.foreach
loop dan kemudian menggunakan salah satu dari cek ini (pikirkancount($collection->column)
:).Saya pikir Anda mencari:
Ini berbeda dari
empty($result)
, yang tidak akan benar karena hasilnya akan menjadi koleksi kosong. Saran Andacount($result)
juga merupakan solusi yang baik. Saya tidak dapat menemukan referensi di dokumensumber
Saya menyetujui jawaban yang disetujui di atas. Tapi biasanya saya menggunakan
$results->isNotEmpty()
metode seperti yang diberikan di bawah ini.Ini lebih bertele-tele daripada
if(!results->isEmpty())
karena terkadang kita lupa menambahkan '!' di depan yang dapat menyebabkan kesalahan yang tidak diinginkan.Perhatikan bahwa metode ini ada dari versi 5.3 dan seterusnya.
sumber
Ada beberapa metode yang diberikan di Laravel untuk memeriksa hasil menghitung / memeriksa kosong / tidak kosong:
sumber
Saya pikir lebih baik digunakan
sumber
Saya pikir Anda mencoba sesuatu seperti
atau juga gunakan
sumber
Anda dapat melakukan
untuk menghitung hasilnya.
Anda juga bisa menggunakan
untuk memeriksa apakah hasilnya kosong atau tidak.
sumber
Menurut status Dokumentasi Laravel Anda dapat menggunakan cara ini:
The
isEmpty
metode kembalitrue
jika koleksi kosong; jika tidak,false
dikembalikan.sumber
jadi Laravel sebenarnya mengembalikan koleksi ketika hanya menggunakan
Model::all();
Anda tidak ingin koleksi yang Anda inginkan array sehingga Anda dapat mengetik mengaturnya.(array)Model::all();
maka Anda dapat menggunakan array_filter untuk mengembalikan hasilnyaini juga akan memungkinkan Anda untuk melakukan hal-hal seperti
count()
.sumber
------TERPECAHKAN------
dalam hal ini Anda ingin memeriksa dua jenis hitungan untuk dua cace
kasus 1:
jika hasilnya hanya berisi satu catatan kata lain pilih satu baris dari basis data menggunakan -> first ()
kasus 2:
jika hasilnya berisi kumpulan beberapa baris kata lain menggunakan -> get () atau -> semua ()
sumber
Kamu bisa memakai:
$counter = count($datas);
sumber