#php #laravel #scope
#php #laravel #область видимости
Вопрос:
У меня есть эта функция в 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}()
Ответ №1:
Ваша $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();