У меня есть эта функция в 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}()
Ваша переменная $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();