Ответ 1
Вы можете передать необходимые переменные из родительской области в замыкание с помощью ключевого слова use
.
Например:
DB::table('users')->where(function ($query) use ($activated) {
$query->where('activated', '=', $activated);
})->get();
Подробнее об этом здесь.
ОБНОВЛЕНИЕ (обновление 2019 г.):
PHP 7.4 (будет выпущен 28 ноября 2019 года) представляет более короткий вариант анонимных функций, называемых arrow functions, что делает его немного менее многословным.
Пример использования PHP 7.4, который функционально почти эквивалентен (см. третий пункт ниже):
DB::table('users')->where(fn($query) => $query->where('activated', '=', $activated))->get();
Отличия от обычного синтаксиса:
- Ключевое слово
fn
вместоfunction
. - Нет необходимости явно перечислять все переменные, которые должны быть захвачены из родительской области - теперь это выполняется автоматически по значению. См. отсутствие ключевого слова
use
в последнем примере. - Функции стрелок всегда возвращают значение. Это также означает, что при их объявлении невозможно использовать тип возвращаемого значения
void
. - Ключевое слово
return
должно быть опущено. - Функции стрелок должны иметь одно выражение, которое является оператором возврата. Многострочные функции в настоящее время не поддерживаются. Вы все еще можете цепочки методов, хотя.