복붙노트

[SQL] Laravel 고급 알의 방법 함수에 변수를 전달하는 방법?

SQL

Laravel 고급 알의 방법 함수에 변수를 전달하는 방법?

문서의 예 :

DB::table('users')
        ->whereExists(function($query)
        {
            $query->select(DB::raw(1))
                  ->from('orders')
                  ->whereRaw('orders.user_id = users.id');
        })
        ->get();

그러나 나는 그 같은 외부 변수를 사용하기 위해 무엇을해야하는 경우 :

            ->where('city_id', '=', $this->city->id)
            ->where(function($query)
                {
                    $query->where('name', 'LIKE', '%'.$searchQuery.'%')
                    ->orWhere('address', 'LIKE', '%'.$searchQuery.'%')

                })

지금 나는 새로운 속성을 생성 $ this->를 통해 액세스,하지만 더 편리한 방법은 무엇입니까?

해결법

  1. ==============================

    1.당신은 사용 키워드 폐쇄에 부모 범위에서 필요한 변수를 전달할 수 있습니다.

    당신은 사용 키워드 폐쇄에 부모 범위에서 필요한 변수를 전달할 수 있습니다.

    예를 들면 :

    DB::table('users')->where(function ($query) use ($activated) {
        $query->where('activated', '=', $activated);
    })->get();
    

    더 여기에합니다.

    PHP 7.4 상세이 조금 덜하게 기능 화살표라는 익명 함수의 짧은 변화는 소개합니다 (2019 년 11 월 28 일 발매 예정).

    기능적으로 등가 인 약 7.4 PHP 사용 예 (아래 3 탄 지점 참조) :

    DB::table('users')->where(fn($query) => $query->where('activated', '=', $activated))->get();
    

    일반 구문에 비해 차이점 :

  2. ==============================

    2.@kajetons '대답은 완벽하게 작동합니다.

    @kajetons '대답은 완벽하게 작동합니다.

    또한처럼 전달하여 여러 변수를 전달할 수 있습니다 사용 ($ var1에를, $ VAR2)

    DB::table('users')->where(function ($query) use ($activated,$var2) {
        $query->where('activated', '=', $activated);
        $query->where('var2', '>', $var2);
    })->get();
    
  3. ==============================

    3.당신이 Laravel의 웅변을 사용하는 경우는 물론이 시도 할 수 있습니다.

    당신이 Laravel의 웅변을 사용하는 경우는 물론이 시도 할 수 있습니다.

    $result = self::select('*')
                        ->with('user')
                        ->where('subscriptionPlan', function($query) use($activated){
                            $query->where('activated', '=', $roleId);
                        })
                        ->get();
    
  4. ==============================

    4.이 작업을 사용하여 변수를 전달할 수 있습니다 ...

    이 작업을 사용하여 변수를 전달할 수 있습니다 ...

    $status =1;
     $info = JOBS::where(function($query) use ($status){        
             $query->where('status',$status);
             })->get();
    print_r($info);
    
  5. from https://stackoverflow.com/questions/29548073/laravel-advanced-wheres-how-to-pass-variable-into-function by cc-by-sa and MIT license