Rumah  >  Artikel  >  rangka kerja php  >  Bagaimanakah Pipeline mengendalikan pertanyaan berbilang syarat Laravel?

Bagaimanakah Pipeline mengendalikan pertanyaan berbilang syarat Laravel?

藏色散人
藏色散人ke hadapan
2022-01-10 15:25:531903semak imbas
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();

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();
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();    
       }}

Penggunaan:

Penggunaan adalah seperti ini
class User {
    use Filterable; }

UsernameFilter

ATAU

UsernameFilter

ATAU
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 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); 
    }}
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!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam