Rumah > Artikel > rangka kerja php > Bagaimanakah Pipeline mengendalikan pertanyaan berbilang syarat Laravel?
Tajuk asal: Laravel Eloquent Query Filter using Pipelineialah salah satu ciri Laravel yang sangat berguna. Pipeline juga merupakan salah satu komponen yang paling biasa digunakan dalam Laravel, seperti middleware.Pautan asal: hafiqiqmal93.medium.com/laravel-eloquent-query-sfilter-using-pipeline-7c6f2673d5>
talian paip
Salah satu ciri Laravel yang pastinya berguna ialah
talian paipialah salah satu komponen yang paling banyak digunakan dalam Laravel contohnya middleware.Pada asasnya, dengan saluran paip kita boleh menghantar objek melalui timbunan tugas dan mendapatkan hasilnya melalui panggilan balik.<.>Pada asasnya, melalui paip, kita boleh menghantar objek melalui timbunan tugas dan mendapatkan keputusan melalui panggilan balik.
Faedah talian paip untuk penapisan pertanyaan ialah kami Banyak najis boleh dikurangkan kepada beberapa baris. Sebelum menggunakan saluran paip, kami biasanya menulis pengawal untuk mendapatkan contoh Eloquent model pengguna dan menyambung beberapa syarat berdasarkan rentetan pertanyaan.Faedah saluran paip untuk penapisan pertanyaan ialah kami boleh mengurangkan banyak talian kepada beberapa talian Oleh kerana tidak mengetahui saluran paip, kami biasanya akan menyediakan pengawal, mendapatkan contoh model Eloquent of User. , dan gunakan beberapa syarat berdasarkan rentetan pertanyaan.
Mari kita lihat kaedah pertanyaan Shishan di bawah.Mari lihat pertanyaan di bawah. Di samping itu, kebolehselenggaraan kod itu agak menyusahkan.
Kelemahannya ialah, keadaan penapisan jelas akan terus berkembang serta penduaan penapis yang sama untuk pertanyaan lain, sebaliknya, kebolehselenggaraan jenis sakit kepala.Mari kita lihat cara pengendalian saluran paip yang elegan
$query = User::query();if ($request->username) { $query->where('username', 'LIKE', "%$request->username%");}if ($request->email) { $query->where('email', 'LIKE', "%$request->email%");}if ($request->address) { $query->where('address', 'LIKE', "%$request->address%");}if ($request->occupation) { $query->where('occupation', 'LIKE', "%$request->occupation%");}return $query->get();
Di sanalah Pipeline menjadi hero
Mudah dan pendek, bukan? Lihat langkah-langkah berikut
Mudah dan ringkas kan? 🎜>
return User::query()->filter([ UsernameFilter::class, EmailFilter::class, AddressFilter::class, OccupationFilter::class])->get();dan cipta skop
Kemudian, anda boleh menggunakannya semula dengan senang hati dalam mana-mana Model Kemudian, gunakan dalam mana-mana model yang anda suka, contohnya Model pengguna
2. Buat Penapis, contohnya
- 2 contoh
Filterable
class Filterable{ public function scopeFilter($query, array $through) { return app(Pipeline::class) ->send($query) ->through($through) ->thenReturn(); }}Penggunaan:
Penggunaan adalah seperti ini
class User { use Filterable; }
UsernameFilter
ATAU
UsernameFilter
class UsernameFilter { public function handle($query, $next) { if (request()->mobile_phone) { $query->where('username', request()->mobile_phone); } return $next($query); }}
Anda juga boleh lulus cara atribut untuk menggunakan paip.Jika anda mahukan lebih kebolehaksesan kepada saluran paip, anda juga boleh lulus atribut.
User::query()->filter([UsernameFilter::class])->get();
Gunakan
Penggunaannya seperti iniSelesai dan bersihSelesaikan, jadi elegan!
Disyorkan: "
class StringFilter { public function handle($query, $next, $column) { if (request()->{$column}) { $query->where($column, 'LIKE', request()->{$column}); } return $next($query); }}Lima tutorial video Laravel terbaharu
"
Atas ialah kandungan terperinci Bagaimanakah Pipeline mengendalikan pertanyaan berbilang syarat Laravel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!