У меня много относительно сложных запросов к БД и есть необходимость производить фильтрацию данных по разным параметрам,
пытаюсь все это дело как-то автоматизировать. Приведу пример простой, но в котором понятно что нужно.
Есть, например, такой запрос
Код: Выделить всё
$posts = Yii::$app->db->createCommand('SELECT * FROM post WHERE user_id=:user_id AND status=:status')
->bindValue(':user_id', $_GET['user_id'])
->bindValue(':status', 1)
Код: Выделить всё
$posts = Yii::$app->db->createCommand('SELECT * FROM post WHERE created_at>:created_at')
->bindValue(':created_at', '2016-01-01')
Код: Выделить всё
SELECT * FROM post
Так вот, хочется иметь метод получения данных с возможностью динамической фильтрации, что-то типа
Код: Выделить всё
public function getPostsByFilter(array $filter)
{
$sql_where = someMethods($filter); // например, генерирует sql код, типа where user_id=1 AND status=1
$posts = Yii::$app->db->createCommand('SELECT * FROM post ' . $where)
}
Код: Выделить всё
$query = new \yii\db\Query();
foreach ($filter as $k => $value) {
$query->andFilterWhere($value);
}
$sql_where = $db->createCommand(
$this->getQueryBuilder($db)->buildWhere($query->where, $query->params),
$query->params
)->getRawSql()
Или лучше написать что-то свое для обработки фильтров?
Кто как видит решения подобных задач или может уже решали подобные?