12

Userという名前のそれ自体と多対多の関係を持つモデルがあるとしfriendsます。そう$user->friends(または$model->friendsビューで)私にオブジェクトの配列を与えUserます。友達をグリッドビューとして表示したかったのです。しかし、オブジェクトCGridViewとしてのデータ。dataProvider以下に示すように、グーグルでモデルオブジェクトの配列をオブジェクトに変換する方法を見つけました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)'),
    );
}
4

2 に答える 2

18

以下に示すプロバイダーの構築には2段階を使用します。しかし、ページ付けの面で問題が発生することがわかりました。私は他のことをしているので、その問題を解決することを気にしませんでした

$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,
    ),
));
于 2013-01-03T10:13:03.450 に答える
13

わかりました:)、以下CActiveDataProviderの代わりに使用できますCArrayDataProvider

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

とにかく返信ありがとう@Stefano

于 2013-01-10T10:02:42.703 に答える