Задать вопрос
@Leopandro
Разработчик CRM/ERP систем

Как править такой код?(или как написать самый идиотоустойчивый код)?

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']]);
                    };
                }
            }
        }

Это функция, которая парсит это дело:
02abe6d3dcec4a5d9f21db20648b02a3.jpg

(Клиент попросил чтобы если первое сравнение < а второе > то был поиск "and" если первое значение больше второго а у меня если < и > применяется поиск по "or" т.к. по моему предположению должно быть < 1 и > 2 чтобы исключить из результата то что находится между 1 и 2, а он вводит первым значением 2 а вторым 1... )
  • Вопрос задан
  • 288 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@pibiv
Javascript который будет разблокировать ввод второго поля только когда заполнено первое, такой вариант не катит?
Ответ написан
Комментировать
akubintsev
@akubintsev
Опытный backend разработчик
Для таких случаев давно уже придумали в разных нормальных фреймворках Forms
Ответ написан
SamDark
@SamDark
Yii2 core team
Вынести в отдельный класс, написать для него тест. Потом можно причёсывать сколько влезет и смотреть, не сломался ли тест.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы