如何模型数据转换对象数组数据提供程序(How to convert model data objec

2019-08-05 10:10发布

假设我有模式User具有多对多的关系,以自身命名为friends 。 这样$user->friends (或$model->friends在视图中)给我的阵列User对象。 我想,以显示朋友们的GridView。 但CGridView数据dataProvider对象。 谷歌搜索它发现模型对象的数组转换的方式dataProvider如下给定的对象。

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

现在,使用此我得到一个错误

没有定义属性“User.id”。

UPDATE

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

Answer 1:

我用两个阶段建立如下所示的提供商。 但我发现,它为您提供了分页方面的麻烦。 我还没有费心去解决这个问题,因为我做其他事情

$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,
    ),
));


Answer 2:

明白了:),我可以使用CActiveDataProvider代替CArrayDataProvider如下面给出的

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

反正感谢您的答复@Stefano



文章来源: How to convert model data objects array to dataProvider