Как использовать несколько условий в Laravel?

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

Таблица выглядит так

Элемент Позиция Пол А Все Все Б Постоянный Все С Все Женский Д Все Мужской Э Временный Все

Я хочу получить данные, в которых категория позиции может быть либо «Все», либо «для конкретного пользователя», а пол может быть «все» или «для конкретного пользователя». Значения позиции и пола пользователя можно получить из данных вошедшего в систему пользователя. Если позиция пользователя «Постоянная», а пол — «Мужской», результаты должны выглядеть так:

Элемент Позиция Пол А Все Все Б Постоянный Все Д Все Мужской

Мне нужен запрос, чтобы получить результат.

Собираетесь ли вы присоединиться самостоятельно? если нет, то поделитесь именем двух таблиц и сообщите, какие столбцы между этими таблицами связаны?

Subha 31.05.2024 08:14

Данные должны поступать только из одной таблицы, поэтому соединение не требуется.

Untamable Beast 31.05.2024 08:26

это все и пользовательский фильтр, поступающий из запроса?

Khayam Khan 31.05.2024 08:37

Отвечает ли это на ваш вопрос? Laravel с использованием ГДЕ или ГДЕ

Mr. Kenneth 31.05.2024 08:40

Пожалуйста, добавьте код, который вы пробовали, в свой вопрос. Это хорошо документировано.

Gert B. 31.05.2024 08:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
5
68
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать Eloquent ORM для создания запроса с несколькими условиями. Итак, сначала получите подробную информацию о вошедшем в систему пользователе, используя Auth, и передайте параметры в условие. Проверьте код ниже.

use App\Models\Item;
use Illuminate\Support\Facades\Auth;

$userPosition = Auth::user()->position;
$userGender = Auth::user()->gender;

$items = Item::where(function($query) use ($userPosition) {
        $query->where('position', 'All')
              ->orWhere('position', $userPosition);
    })
    ->where(function($query) use ($userGender) {
        $query->where('gender', 'All')
              ->orWhere('gender', $userGender);
    })
    ->get();

Это решило проблему, с которой я столкнулся. Код пришел как спасение.

Untamable Beast 31.05.2024 09:04
Ответ принят как подходящий

Вы можете использовать whereIn() :

$items = Item::whereIn('position', ['All', $userPosition])
        ->whereIn('gender', ['All', $userGender])
        ->get();

который выдаст следующий подготовленный оператор:

select * from `items` where `position` in (?, ?) and `gender` in (?, ?)

а затем выполните его с предоставленными значениями - ['All', 'Permanent', 'All', 'Male']

Другие вопросы по теме