Ошибка PHP с переменной в функции обратного вызова

У меня есть эта функция в php (laravel):

public static function isUserParticipatesInTournament($tourId, $userId) { var_dump($userId); //dumped $user = User::find($userId); if(!$user) { return null; } $obj = $user->whereHas('tournaments', function($query) { var_dump($tourId); //error $query->where('id', '=', $tourId); //error })->get(); return $obj; } 

Проблема в том, что в закрытии $obj = $user->whereHas('tournaments', function($query){...} переменная $tourId в ней не определена. Я получаю эту ошибку: Undefined variable: userId .

Почему это происходит? Переменная объявляется в области внутренней функции. Моя единственная мысль состоит в том, что это функция обратного вызова.

Когда я попытался выполнить эту функцию: $obj = $user->whereHas('tournaments', function($query, $tourId){...} я получаю это исключение:

 Missing argument 2 for User::{closure}() 

Solutions Collecting From Web of "Ошибка PHP с переменной в функции обратного вызова"

Ваша переменная $tourId не входит в объем вашей анонимной функции. Посмотрите ключевое слово use чтобы узнать, как его можно добавить в область видимости. См. Пример 3 на этой странице: http://www.php.net//manual/en/functions.anonymous.php

Он должен выглядеть примерно так:

 $obj = $user->whereHas('tournaments', function($query) use($tourId) { var_dump($tourId); // Dumps OK })->get();