Pipeline은 Laravel 다중 조건 쿼리를 어떻게 처리합니까?

藏色散人
풀어 주다: 2022-01-11 09:57:35
앞으로
1913명이 탐색했습니다.

튜토리얼 칼럼에서 파이프라인에서 Laravel의 다중 조건 쿼리를 처리하는 방법을 소개하는 내용입니다. 모든 분들께 도움이 되길 바랍니다! 원본 제목: Laravel Eloquent Query Filter using Pipeline원본 링크: hafiqiqmal93.medium.com/laravel-eloquent-query-sfilter-using-pipeline-7c6f2673d5da


pipeline

은 Laravel의 특히 유용한 기능 중 하나입니다. . 파이프라인은 미들웨어와 같이 Laravel에서 가장 일반적으로 사용되는 구성 요소 중 하나입니다.

Laravel의 유용한 기능 중 하나는 pipeline

입니다. 파이프라인은 미들웨어와 같이 Laravel에서 가장 많이 사용되는 구성 요소 중 하나입니다.

기본적으로 파이프를 통해 작업 스택을 통해 개체를 전달할 수 있습니다. 그리고 콜백을 통해 결과를 얻습니다.

기본적으로 파이프라인을 사용하면 작업 스택을 통해 개체를 전달하고 콜백을 통해 결과를 얻을 수 있습니다.

파이프라인의 쿼리 필터링 이점은 수많은 내용을 몇 줄로 줄일 수 있다는 것입니다. 파이프라인을 사용하기 전에 우리는 일반적으로 사용자 모델의 Eloquent 인스턴스를 얻고 쿼리 문자열을 기반으로 일부 조건을 연결하는 컨트롤러를 작성했습니다.

쿼리 필터링을 위한 파이프라인의 이점은 수많은 줄을 여러 줄로 줄일 수 있다는 것입니다. 파이프라인을 인식하지 못하면 일반적으로 컨트롤러를 설정하고 Eloquent of User 모델의 인스턴스를 가져오고 일부 조건을 기반으로 적용합니다. 쿼리 문자열에.

아래의 똥산 쿼리 방법을 살펴보겠습니다.

아래 쿼리를 살펴보겠습니다.

$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();
로그인 후 복사
단점은 명백합니다. 필터 조건이 똥산처럼 계속 쌓이고, 중복된 코드도 많이 있습니다. 게다가 코드의 유지보수성은 약간 골칫거리입니다.

단점은 필터 조건이 계속해서 증가할 뿐만 아니라 다른 쿼리에 대해 동일한 필터가 중복된다는 점입니다. 반면에 코드 유지 관리가 골치 아픈 일입니다.

파이프라인의 우아함을 살펴보겠습니다.

파이프라인이 영웅이 되는 곳이 있습니다

return User::query()->filter([ 
    UsernameFilter::class,
    EmailFilter::class,
    AddressFilter::class,
    OccupationFilter::class])->get();
로그인 후 복사

간단하고 짧죠? 다음 단계를 살펴보세요간단하고 짧죠? 하지만 그 전에,

1. "Filterable"이라는 특성 클래스를 만들고 범위 메서드를 작성합니다.

Filterable 범위를 생성하고

class Filterable{ 
       public function scopeFilter($query, array $through)
       {        
            return app(Pipeline::class)
                   ->send($query)            
                   ->through($through)            
                   ->thenReturn();    
       }}
로그인 후 복사
그런 다음 User 모델과 같은 모든 모델에서 이를 재사용할 수 있습니다
  1. Filterable and create a scope
class User {
    use Filterable; }
로그인 후 복사

然后,你就可以愉快的在任意Model中复用它,如User模型

Then, use it in any model that you prefer, for example User model

class UsernameFilter {
    public function handle($query, $next)
    {        
        if (request()->mobile_phone) {           
           $query->where('username', request()->mobile_phone);      
        }         
        return $next($query);  
    }}
로그인 후 복사

2.创建一个Filter,例如UsernameFilter

2. Create a filter for example UsernameFilter그런 다음 User 모델과 같이 원하는 모델에서 사용할 수 있습니다. model

User::query()->filter([UsernameFilter::class])->get();
로그인 후 복사

2. UsernameFilter

2와 같은 필터를 만듭니다.

사용법은 다음과 같습니다

class StringFilter {
    public function handle($query, $next, $column) {
        if (request()->{$column}) {           
            $query->where($column, 'LIKE', request()->{$column});      
        } 
        return $next($query); 
    }}
로그인 후 복사
OR

OR

또한 속성을 전달하여 파이프를 사용합니다.

파이프라인에 대한 접근성을 높이고 싶다면 속성을 전달할 수도 있습니다.

완료. 간단하고 깔끔함

추천: "

최신 5개 Laravel 비디오 튜토리얼

"

위 내용은 Pipeline은 Laravel 다중 조건 쿼리를 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿