문서의 예 :
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);
답변
