Rumah > rangka kerja php > Laravel > teks badan

Bagaimanakah Pipeline mengendalikan pertanyaan berbilang syarat Laravel?

藏色散人
Lepaskan: 2022-01-11 09:57:35
ke hadapan
1908 orang telah melayarinya
Di bawah ialah

Laravel Lajur tutorial akan memperkenalkan PIPELINE cara menangani pertanyaan berbilang keadaan Laravel, saya harap ia akan membantu semua orang!

Tajuk asal: Laravel Eloquent Query Filter using Pipeline

Pautan asal: hafiqiqmal93.medium.com/laravel-eloquent-query-sfilter-using-pipeline-7c6f2673d5>

talian paip
ialah salah satu ciri Laravel yang sangat berguna. Pipeline juga merupakan salah satu komponen yang paling biasa digunakan dalam Laravel, seperti middleware.

Salah satu ciri Laravel yang pastinya berguna ialah

talian paip
ialah salah satu komponen yang paling banyak digunakan dalam Laravel contohnya middleware.

<.>Pada asasnya, melalui paip, kita boleh menghantar objek melalui timbunan tugas dan mendapatkan keputusan melalui panggilan balik.

Pada asasnya, dengan saluran paip kita boleh menghantar objek melalui timbunan tugas dan mendapatkan hasilnya 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();
Salin selepas log masuk

Di sanalah Pipeline menjadi hero

Mudah dan pendek, bukan? Lihat langkah-langkah berikut


Mudah dan ringkas kan? 🎜>

Buat sifat bernama
return User::query()->filter([ 
    UsernameFilter::class,
    EmailFilter::class,
    AddressFilter::class,
    OccupationFilter::class])->get();
Salin selepas log masuk
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
  1. Filterable
  2. 2 contoh
class Filterable{ 
       public function scopeFilter($query, array $through)
       {        
            return app(Pipeline::class)
                   ->send($query)            
                   ->through($through)            
                   ->thenReturn();    
       }}
Salin selepas log masuk

Penggunaan:

Penggunaan adalah seperti ini
class User {
    use Filterable; }
Salin selepas log masuk

UsernameFilter

ATAU

UsernameFilter

ATAU
class UsernameFilter {
    public function handle($query, $next)
    {        
        if (request()->mobile_phone) {           
           $query->where('username', request()->mobile_phone);      
        }         
        return $next($query);  
    }}
Salin selepas log masuk

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();
Salin selepas log masuk

Gunakan

Penggunaannya seperti ini

Selesaikan, jadi elegan!

Selesai dan bersih

Disyorkan: "
class StringFilter {
    public function handle($query, $next, $column) {
        if (request()->{$column}) {           
            $query->where($column, 'LIKE', request()->{$column});      
        } 
        return $next($query); 
    }}
Salin selepas log masuk
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!

Label berkaitan:
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan