Как организовать опциональное условие в запросе?

В Laravel вы можете организовать опциональное условие в запросе, используя метод when или метод orWhere в запросах Eloquent.

Метод when позволяет выполнять дополнительную логику в запросе, только если условие истинно. Вот пример использования when:

$users = DB::table('users')
            ->when($request->has('is_admin'), function ($query) {
                return $query->where('is_admin', true);
            })
            ->get();

В этом примере запрос выбирает всех пользователей, если от клиента получен параметр is_admin, и только тех пользователей, которые имеют значение true в столбце is_admin.

Если параметр is_admin равен false или не передан вообще, то условие не будет применяться, и в запросе будут выбраны все записи из таблицы users.

Метод orWhere позволяет добавлять альтернативное условие в запрос, если предыдущие условия не выполнились. Вот пример:

$users = DB::table('users')
            ->where('name', 'John')
            ->orWhere(function ($query) {
                $query->where('age', '>', 30)
                      ->where('is_admin', false);
            })
            ->get();

В этом примере запрос выбирает пользователей с именем "John", или пользователей старше 30 лет и не являющихся администраторами.

Если в таблице есть записи пользователя с именем "John", то данные пользователи будут выбраны независимо от других альтернативных условий. Если условие для имени "John" не выполняется, тогда будут выбраны пользователи, соответствующие альтернативным условиям.

В обоих примерах условия могут быть любыми - вы можете использовать все доступные методы в классе QueryBuilder, чтобы создать дополнительные условия, опираясь на вашу логику.

В целом, методы when и orWhere могут быть мощными инструментами для организации опциональных условий в запросах в Laravel, и помогают упростить код и обеспечить более чистую структуру запросов.