foreach ($params as $param)
{
if ($param['label'] != 'name'){
if ($param['type_value'] == '1') {
if ($param['value'] != '')
$query->where(['like', $param['label'], $param['value']]);
}
else {
if(($param['firstcompare'] == '<' || $param['firstcompare'] == '<=' || $param['firstcompare'] == '=') && $param['firstvalue'] != '') {
if($param['secondcompare'] != '' && $param['secondvalue'] != ''){
$query->where([
'or',
$param['label'].$param['firstcompare'].$param['firstvalue'],
$param['label'].$param['secondcompare'].$param['secondvalue']
]);
// ->andWhere([$param['secondcompare'], $param['label'], $param['secondvalue']]);
}
else{
$query->where([$param['firstcompare'], $param['label'], $param['firstvalue']]);
}
}
elseif($param['firstcompare'] == '>' || $param['firstcompare'] == '>=' && $param['firstvalue'] != '')
{
if($param['secondcompare'] != '' && $param['secondvalue'] != ''){
$query->where([
'and',
$param['label'].$param['firstcompare'].$param['firstvalue'],
$param['label'].$param['secondcompare'].$param['secondvalue']
]);
}
else{
$query->where([$param['firstcompare'], $param['label'], $param['firstvalue']]);
}
}
elseif($param['firstcompare'] == '' || $param['firstvalue'] == '') {
if ($param['secondcompare'] != '' || $param['secondvalue'] != '')
$query->where([$param['secondcompare'], $param['label'], $param['secondvalue']]);
};
}
}
}
Это функция, которая парсит это дело:
(Клиент попросил чтобы если первое сравнение < а второе > то был поиск "and" если первое значение больше второго а у меня если < и > применяется поиск по "or" т.к. по моему предположению должно быть < 1 и > 2 чтобы исключить из результата то что находится между 1 и 2, а он вводит первым значением 2 а вторым 1... )