Intereting Posts
Работа с котировками, добавленными PDO :: prepare () Расширение пользовательского контроля ZfcUser в пользовательском модуле Установить переменную сеанса с помощью javascript Simultaneusly заполняет несколько выпадающих списков данными из таблицы mysql, используя тот же запрос В PHP не отображаются сообщения об ошибках PHP explode () не работает с символом «-» Opencart: Как включить скрипт на определенные страницы? MySQL – Как получить результаты поиска с точной релевантностью php json_encode не приводит к реальной строке объекта / make массиву в реальном объекте / превращает php-массив в json php – установка обновления и удаление проблем – сохранение удаления записей Как добавить ajax в тему WordPress Хранение изображений в байтовых полях в базе данных PostgreSQL Laravel 5.1 – Вложенная петля – Blade Templating Сгенерировать все возможные комбинации с помощью набора строк Создание ссылки в dataGrid

Как преобразовать массив объектов данных модели в dataProvider

Предположим, у меня есть модель User которая имеет много-много отношение к себе, называемое friends . поэтому $user->friends (или $model->friends in view) дает мне массив объектов User . Я хотел показать друзей как gridview. Но CGridView данные как объект dataProvider . Googling для него нашел способ преобразования массива объектов модели в объект dataProvider как указано ниже.

 $this->widget('zii.widgets.grid.CGridView', array( 'id' => 'gridUser', 'dataProvider' => new CArrayDataProvider($model->friends, array()), )); 

Теперь, используя это, я получаю сообщение об ошибке

Свойство «User.id» не определено.

ОБНОВИТЬ

 public function relations() { return array( 'friends' => array(self::MANY_MANY, 'User', 'friendship(user_id, friend_id)'), ); } 

Я использую двухэтапное построение провайдера, показанного ниже. Но я обнаружил, что это создает проблемы с точки зрения разбивки на страницы. Я не потрудился решить эту проблему, так как делаю другие вещи

 $dataProvider = new CArrayDataProvider('User'); $dataProvider->setData($model->friends); $this->widget('zii.widgets.grid.CGridView', array( 'id' => 'gridUser', 'dataProvider' =>$dataProvider, )); 

При этом ваш код должен работать (см. Пример ниже из документации API). Я подозреваю, что в ваших отношениях есть неправильный атрибут, чем предоставленный код. Повторно проверьте определение отношения, если оно в порядке

Из документов Yii:

 $rawData=Yii::app()->db->createCommand('SELECT * FROM tbl_user')->queryAll(); // or using: $rawData=User::model()->findAll(); <--this better represents your question $dataProvider=new CArrayDataProvider($rawData, array( 'id'=>'user', 'sort'=>array( 'attributes'=>array( 'id', 'username', 'email', ), ), 'pagination'=>array( 'pageSize'=>10, ), )); 

Получил это :), я могу использовать CActiveDataProvider вместо CArrayDataProvider как указано ниже

 $this->widget('zii.widgets.grid.CGridView', array( 'id' => 'gridUser', 'dataProvider' => new CActiveDataProvider('User', array( 'data'=>$model->friends, )), //...... columns display list..... )); 

В любом случае спасибо за ответ @Stefano