Передача внешней переменной в функцию where в Laravel
Быстрый ответ
В Laravel для передачи внешних переменных в анонимные функции используется ключевое слово use
. Такой подход позволяет формировать гибкие и динамичные условия в запросах where
. Вот пример использования переменной $age
:
$age = 25;
$users = User::where(function($query) use ($age) {
$query->where('age', '>', $age);
})->get();
В PHP версии 7.4 и выше доступны стрелочные функции, которые позволяют избавиться от явного указания use
:
$age = 25;
$users = User::where(fn($query) => $query->where('age', '>', $age))->get();
Продвинутое применение Where и управление областью видимости переменных
Управление несколькими переменными
Чтобы передать несколько внешних переменных, их нужно просто перечислить в блоке use
анонимной функции:
$minAge = 18;
$maxAge = 35;
$users = User::where(function($query) use ($minAge, $maxAge) {
$query->whereBetween('age', [$minAge, $maxAge]);
})->get();
Применение условных ограничений
Laravel предоставляет метод when
для создания условных ограничений на основе значений переменных:
$age = 25;
$occupation = 'developer';
$users = User::when($age, function($query) use ($age) {
return $query->where('age', '>', $age);
})->when($occupation, function($query) use ($occupation) {
return $query->where('occupation', $occupation);
})->get();
Стрелочные функции PHP7.4: краткий и чистый синтаксис
Попадание в цель!
Стрелочные функции в PHP 7.4 упрощают синтаксис анонимных функций и автоматически захватывают используемые переменные, благодаря чему код становится более чистым.
Особенности стрелочных функций
Стрелочные функции предполагают использование однострочных выражений. Многострочные инструкции в таком контексте неприменимы, что считается недостатком данного подхода.
Визуализация
Пример корректной передачи переменной в функцию where
:
Ваша задача — познакомить функцию (🔒) с переменной (🔑):
$query->where(function($subQuery) use ($key) {
$subQuery->where('column', '=', $key);
});
Результат:
🔑 + 🔒 -> [ Доступ к данным открыт (🔓) ]
Вложенные анонимные функции и переменные
Пример передачи переменных на различных уровнях вложенности:
$limit = 100;
$users = User::where(function($query) use ($limit) {
$query->where('score', '>', 50)
->orWhere(function($subQuery) use ($limit) {
$subQuery->where('views', '>', $limit);
});
})->get();
Область видимости и избежание затенения переменных
Для избежания возможных проблем со затенением переменных в анонимных функциях рекомендуется использовать уникальные имена параметров.
Полезные материалы
- Официальная документация Laravel – про продвинутые where-условия.
- Laravel News – статьи о динамических where-условиях в Eloquent.
- GitHub Gist: Пример передачи параметров – пример передачи переменных в анонимные функции.
- Laravel Daily на YouTube – видео о реализации запросов в Eloquent.
- Разъяснение Тейлора Отвелла по работе с методом 'when' в Eloquent.