Почему не работает сортировка и фильтрация в GridView в Yii2 с MongoBD по связанному полю?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Myst
Сообщения: 32
Зарегистрирован: 2016.01.22, 15:06

Почему не работает сортировка и фильтрация в GridView в Yii2 с MongoBD по связанному полю?

Сообщение Myst »

Имеем yii2 + mongodb и две коллекции Items (товары) и Cats (категории товаров). Вывожу в GridView поля из Items + имя категории из связи "cat". Фильтрация и сортировка полей из коллекции Items работает нормально, имя категорий из связанной таблицы Cats выводятся нормально, на заголовке колонки связанного поля "name" появляется ссылка для сортировки и под ним появляется поле для фильтрации, но при клике на заголовке для сортировки ничего не происходит, при вводе значений в поле фильтра тоже ничего не происходит. В чём ошибка? Спасибо за любую помощь.

Model Items:

Код: Выделить всё

class Items extends ActiveRecord {

    public static function CollectionName() {
        return ['local', 'items'];
    }

    public function attributes() {
        return ['_id', 'name', 'cat_id'];
    }

    public function rules() {
        return [[['_id', 'name', 'cat_id'], 'string']];
    }

    public function attributeLabels() {
        return [...];
    }

    public function getCat() {
        return $this->hasOne(Cats::className(), [(string) '_id' => (string) 'cat_id']);
    }    
}
Cats->_id это mongo ObjectId, Items->cat_id это string. Так же пробовал делать без преобразования типов в string - результата не дало..

Model ItemsSearch:

Код: Выделить всё

class ItemsSearch extends Items {

    public function attributes() {
        return ['_id', 'name', 'cat_id', 'cat.name'];
    }

    public function scenarios() {
        return Model::scenarios();
    }

    public function search($params) {
        $query = Items::find();

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => ['pageSize' => 30],
        ]);

        $dataProvider->sort->attributes['cat.name'] = [
            'asc' => ['cat.name' => SORT_ASC],
            'desc' => ['cat.name' => SORT_DESC],
        ];

        $this->load($params);

        if (!$this->validate()) {
            return $dataProvider;
        }

         $query->andFilterWhere([
                '_id' => $this->_id,
                 ...
            ]);

        $query->andFilterWhere(['like', 'cat.name', $this->getAttribute('cat.name')])
               ...;

        return $dataProvider;
    }

}
Model Cats:

Код: Выделить всё

class Cats extends ActiveRecord {

    public static function collectionName() {
        return ['local', 'cats'];
    }

    public function attributes() {
        return [
            '_id',
            'name',
            ...
        ];
    }

    public function rules() {
        return [
            [['_id'], 'required'],
            [['name'], 'string'],
        ];
    }
}
Аватара пользователя
Jester
Сообщения: 16
Зарегистрирован: 2018.08.27, 12:51
Контактная информация:

Re: Почему не работает сортировка и фильтрация в GridView в Yii2 с MongoBD по связанному полю?

Сообщение Jester »

Здравствуйте, вопрос решили? Такая же проблема, в GridView вывод данных есть, а вот при поиске или сортировке ничего не происходит. Самое странное запрос выполняется нормально, а данные не фильтруются.
Ответить