Есть ли безопасный способ создания условного предложения для Yii2 ORM с строкой запроса параметрами?Например, нам требуется список некоторых пищевых продуктов, фильтрующих по их свойствам:
GET /food/?weight[>]=1000&calories=[<]=200
И существует множество различных свойств продуктов: вес, калории, количество, цена.
Я ожидаю, что можно написать что-то вроде (упрощенный код):
$query = new \yii\db\Query();
foreach ($_GET as $parameter => $condition){
foreach ($condition as $operator => $value){
$query->where(new SimpleCondition($parameter, $operator, $value));
}
}
Но я сомневаюсь этот подход безопасен .
Итак, есть три вопроса:
- Как можно безопасно определить свойства из URL?Можем ли мы очистить параметр строки запроса names (не values ) перед использованием в предложении
ActiveQuery::where
? - Как правильно определить операторы, такие как
IN, AND, OR, >, <, >=, <=, etc.
? - Есть ли какой-нибудь собственный компонент Yii2 для фильтрации или мне следует использовать сторонний модуль?