Saya menggunakan pembuat kueri Laravel Eloquent dan saya punya permintaan di mana saya ingin WHERE
klausa pada beberapa kondisi. Ini bekerja, tetapi tidak elegan.
Contoh:
$results = User::where('this', '=', 1)
->where('that', '=', 1)
->where('this_too', '=', 1)
->where('that_too', '=', 1)
->where('this_as_well', '=', 1)
->where('that_as_well', '=', 1)
->where('this_one_too', '=', 1)
->where('that_one_too', '=', 1)
->where('this_one_as_well', '=', 1)
->where('that_one_as_well', '=', 1)
->get();
Apakah ada cara yang lebih baik untuk melakukan ini, atau haruskah saya tetap menggunakan metode ini?
->where(...)
panggilan dapat diganti dengan->whereIn(...)
panggilan, dan sebagainya .Jawaban:
Di Laravel 5.3 (dan masih berlaku pada 7.x ) Anda bisa menggunakan lebih banyak butiran granular yang dilewatkan sebagai array:
Secara pribadi saya belum menemukan use case untuk ini lebih dari beberapa
where
panggilan, tetapi kenyataannya adalah Anda dapat menggunakannya.Sejak Juni 2014 Anda dapat meneruskan larik ke
where
Selama Anda menginginkan semua operator yang
wheres
digunakanand
, Anda dapat mengelompokkannya dengan cara ini:Kemudian:
Di atas akan menghasilkan permintaan seperti itu:
sumber
=
.WHERE (a IS NOT NULL AND b=1) OR (a IS NULL AND b=2);
?$users = DB::table('users')->where([ ['status', '=', '1'], ['subscribed', '<>', '1'], ])->get();
whereNotIn
jawaban Anda sesuai dengan pertanyaan lainwhere
?Lingkup kueri dapat membantu Anda membuat kode Anda lebih mudah dibaca.
http://laravel.com/docs/eloquent#query-scopes
Memperbarui jawaban ini dengan beberapa contoh:
Di model Anda, buat metode cakupan seperti ini:
Kemudian, Anda dapat memanggil cakupan ini sambil membangun kueri Anda:
sumber
Anda dapat menggunakan subquery dalam fungsi anonim seperti ini:
sumber
Dalam hal ini Anda dapat menggunakan sesuatu seperti ini:
Itu seharusnya memberi Anda permintaan seperti:
sumber
Ketentuan menggunakan Array:
Akan menghasilkan kueri seperti di bawah ini:
Kondisi menggunakan Fungsi Antonim:
Akan menghasilkan kueri seperti di bawah ini:
sumber
Beberapa klausa tempat
akhirnya mendapatkan hasilnya
sumber
The
whereColumn
metode dapat melewati array beberapa kondisi. Kondisi ini akan bergabung menggunakanand
operator.Contoh:
Untuk informasi lebih lanjut, lihat bagian dokumentasi ini https://laravel.com/docs/5.4/queries#where-clauses
sumber
ATAU
ATAU
sumber
Pastikan untuk menerapkan filter lain ke sub kueri, jika tidak, atau mungkin mengumpulkan semua catatan.
sumber
sumber
Tanpa contoh nyata, sulit untuk membuat rekomendasi. Namun, saya tidak pernah perlu menggunakan klausa WHERE sebanyak itu dalam kueri dan itu mungkin mengindikasikan masalah dengan struktur data Anda.
Mungkin bermanfaat bagi Anda untuk belajar tentang normalisasi data: http://en.wikipedia.org/wiki/Third_normal_form
sumber
Anda dapat menggunakan fasih di Laravel 5.3
Semua hasil
Hasil parsial
sumber
gunakan
whereIn
kondisi dan lulus array$array = [1008,1009,1010];
User::whereIn('users.id', $array)->get();
sumber
Anda dapat menggunakan array di mana klausa seperti yang ditunjukkan di bawah ini.
sumber
sumber
Sesuai saran saya jika Anda melakukan filter atau pencarian
maka Anda harus pergi dengan:
sumber
Gunakan ini
sumber
Menggunakan Eloquent murni, terapkan seperti itu. Kode ini mengembalikan semua pengguna yang login yang akunnya aktif.
$users = \App\User::where('status', 'active')->where('logged_in', true)->get();
sumber
Contoh kode.
Pertama :
array terisi di sini menggunakan hitungan / loop kondisi yang diinginkan , secara bertahap:
dan di sini:
dan selanjutnya dengan fasih seperti:
sumber
sumber
sumber