Передача внешней переменной в функцию where в Laravel

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

В Laravel для передачи внешних переменных в анонимные функции используется ключевое слово use. Такой подход позволяет формировать гибкие и динамичные условия в запросах where. Вот пример использования переменной $age:

php
Скопировать код
$age = 25;

$users = User::where(function($query) use ($age) {
    $query->where('age', '>', $age);
})->get();

В PHP версии 7.4 и выше доступны стрелочные функции, которые позволяют избавиться от явного указания use:

php
Скопировать код
$age = 25;

$users = User::where(fn($query) => $query->where('age', '>', $age))->get();
Кинга Идем в IT: пошаговый план для смены профессии

Продвинутое применение Where и управление областью видимости переменных

Управление несколькими переменными

Чтобы передать несколько внешних переменных, их нужно просто перечислить в блоке use анонимной функции:

php
Скопировать код
$minAge = 18;
$maxAge = 35;

$users = User::where(function($query) use ($minAge, $maxAge) {
    $query->whereBetween('age', [$minAge, $maxAge]);
})->get();

Применение условных ограничений

Laravel предоставляет метод when для создания условных ограничений на основе значений переменных:

php
Скопировать код
$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:

Markdown
Скопировать код
Ваша задача — познакомить функцию (🔒) с переменной (🔑):
php
Скопировать код
$query->where(function($subQuery) use ($key) {
    $subQuery->where('column', '=', $key);
});
Markdown
Скопировать код
Результат:

🔑 + 🔒 -> [ Доступ к данным открыт (🔓) ]

Вложенные анонимные функции и переменные

Пример передачи переменных на различных уровнях вложенности:

php
Скопировать код
$limit = 100;

$users = User::where(function($query) use ($limit) {
    $query->where('score', '>', 50)
          ->orWhere(function($subQuery) use ($limit) {
              $subQuery->where('views', '>', $limit);
          });
})->get();

Область видимости и избежание затенения переменных

Для избежания возможных проблем со затенением переменных в анонимных функциях рекомендуется использовать уникальные имена параметров.

Полезные материалы

  1. Официальная документация Laravel – про продвинутые where-условия.
  2. Laravel News – статьи о динамических where-условиях в Eloquent.
  3. GitHub Gist: Пример передачи параметров – пример передачи переменных в анонимные функции.
  4. Laravel Daily на YouTube – видео о реализации запросов в Eloquent.
  5. Разъяснение Тейлора Отвелла по работе с методом 'when' в Eloquent.