Как использовать оператор IN в операторе Laravel WHERE? - PullRequest
1 голос
/ 19 сентября 2019

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

На стороне сервера я использую следующий код для генерации массива условий, которые будут использоваться в предложении where:

$conditionArray=array();
foreach($filtersList as $filter) {
    $whereArray[]=array($filter['Column'], $filter['Condition']), $filter['Value']);
}
$data =  User::where($conditionArray)->get();

Это работает, как и ожидалось, для простых операторов (=; <=; >=; !=), но когда я пытаюсь использовать расширенные операторы (BETWEEN; IN),запрос не выполнен.

Мой вопрос: как добавить IN и BETWEEN к предложению WHERE?Есть ли лучший подход для достижения того, что я пытаюсь сделать?

1 Ответ

1 голос
/ 19 сентября 2019

Конструктор запросов Laravel имеет свои собственные методы для операторов in и between.Вы должны проверить официальную документацию для получения дополнительной информации.

У меня была похожая проблема, и я решил ее с подходом немного другим.Вот пример:

$query = MyModel::newQuery();

foreach($statements as $statement) {
    switch($statement['operator']) {
        case 'between':
          $query->whereBetween([...]);
          break;
        case 'in':
          $query->whereIn([...]);
          break;
        /* OTHER CASES */
        default:
          $query->where(/*...*/);
          break;
    }
}

$models = $query->get();

Результат похож на это:

$models = MyModel::where([...])->whereIn([...])->[...]->get();

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

...