[php] Laravel Advanced 함수에 변수를 전달하는 방법은 어디입니까?

문서의 예 :

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->했지만 더 편리한 방법이 있습니까?



답변

use키워드 를 사용하여 부모 범위에서 필요한 변수를 클로저로 전달할 수 있습니다 .

예를 들면 :

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

여기 에 더 많은 것들이 있습니다 .

편집 (2019 업데이트) :

PHP 7.4 ( 2019 년 11 월 28 일 출시 예정 )에서는 화살표 함수 라고하는 익명 함수의 더 짧은 변형을 도입 하여 좀 덜 장황하게 만듭니다.

기능적으로 거의 동일한 PHP 7.4를 사용한 예 (아래 세 번째 글 머리 기호 참조) :

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

일반 구문과의 차이점 :

  • fn대신 function.
  • 부모 범위에서 캡처해야하는 모든 변수를 명시 적으로 나열 할 필요가 없습니다. 이제 값별로 자동으로 수행됩니다. use후자의 예에서 키워드 부족을 참조하십시오 .
  • 화살표 함수는 항상 값을 반환합니다. 이것은 또한 void선언 할 때 반환 유형 을 사용할 수 없음을 의미 합니다.
  • return키워드가 있어야 생략.
  • 화살표 함수 에는 return 문인 단일 표현식이 있어야합니다 . 현재 여러 줄 기능은 지원되지 않습니다. 그래도 메서드를 연결할 수 있습니다.


답변

@kajetons의 대답은 완전히 작동합니다.

다음과 같이 전달하여 여러 변수를 전달할 수도 있습니다. use($var1, $var2)

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


답변

Laravel eloquent를 사용한다면 이것도 시도해 볼 수 있습니다.

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


답변

이것을 사용하여 변수를 전달할 수 있습니다 …

$status =1;
 $info = JOBS::where(function($query) use ($status){
         $query->where('status',$status);
         })->get();
print_r($info);


답변