Yii2 выборка по json строке
Вообщем у меня приложение, на фронте это ангуляр на backend это yii2. И мне надо сделать определенную выборку значений с условием по Json строке. Строка выглядит примерно так: {"due": "2020-06-09T10:21:31.698Z", "status": 0, ... }
Вообщем-то обычная json строка, а выборку я делаю так:
$filter = Yii::$app->request->queryParams;
$query = UserDictionary::find()->joinWith('dictionaryWord')
->where(['user_dictionary.user_id' => (int)$filter['user_id']])
->andWhere(['<=', 'workout_progress_card', new JsonExpression(['due' => (string)$filter['time']])]);
if (array_key_exists('type', $filter) && $filter['type'] != 'undefined' && $filter['type'] != '') {
if (strcasecmp('kanji', $filter['type']) == 0) {
$type = UserDictionary::TYPE_KANJI;
} else {
$type = UserDictionary::TYPE_WORD;
}
$query->andWhere(['type' => (int)$type]);
}
$query->orderBy(new Expression("workout_progress_card->>'due' ASC"));
return new ActiveDataProvider([
'query' => $query,
'pagination' => false
]);
Ну думаю понятно я выбираю значение у которых время меньше либо равно тому которое я передаю, и вообщем-то проблема в том что я получаю пустоту, хотя у меня точно есть парочка значений которые я должен получить. Я предпологаю проблема в том, что дата хранится как строка. Вообщем можно ли как-то исправить эту проблему? кроме как перебирать полученный массив ручка форматируя приэтом строку в нормальную дату. Может кто-то сталкивался. Просто для справки БД PostgreSQL
Ответы (1 шт):
Всё я придумал как сделать, правда пришлось изменить чутка систему хранения дат, но зато стало работать:
$query = UserDictionary::find()->joinWith('dictionaryWord')
->where(['user_dictionary.user_id' => (int)$filter['user_id']])
->andWhere(new Expression("workout_progress_card->>'due' <= '" . time() . "'"));
Вот впринципе рабочий запрос.