Я пытаюсь расширить одно приложение для использования моего нового приложения Laravel.В этом сценарии я получаю неизвестное количество фильтров и хочу перенаправить их все в предложение where()
.
Я сделал что-то вроде этого:
private function filterConverter($filter)
{
$f = [];
foreach ($filter as $singleFilter) {
$operator = $this->filterValues[$singleFilter['operator']];
$value = $operator == 'like' ? '%' . $singleFilter['value'] . '%' : $singleFilter['value'];
$f[] = $singleFilter['field'] . ',' . $operator . ',' . $value;
}
return $f;
}
Дело в том, что я получаю операторов типа EQUALS
и CONTAINS
, поэтому мне нужно преобразовать их в =
и LIKE
.
С помощью этого кода я пытаюсь сделать это:
return response(MyModel::where($filter)->get());
Но это не работает.Есть какой-нибудь элегантный способ решить эту проблему?
РЕДАКТИРОВАТЬ / РЕШЕНИЕ
Извините за @ HCK , так как я не мог принять ответ с тех порэто не отвечает на мой вопрос, но оно указало мне на правильный путь.Решением было использование ключей key
, operator
, value
в массиве вместо того, что было у меня без ключа.
private function filterConverter($filters)
{
$filter = [];
foreach ($filters as $singleFilter) {
$operator = $this->filterMap[$singleFilter['operator']];
$value = $operator == 'LIKE' ? '%' . $singleFilter['value'] . '%' : $singleFilter['value'];
$filter[] = [
'key' => $singleFilter['field'],
'operator' => $operator,
'value' => $value
];
}
return $filter;
}