【问题标题】:How to convert model data objects array to dataProvider如何将模型数据对象数组转换为 dataProvider
【发布时间】:2012-12-17 13:32:18
【问题描述】:

假设我有模型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”。

更新

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

【问题讨论】:

  • 添加您如何定义关系以及两个模型如何关联(PK 和 FK)对于获得答案至关重要!

标签: php model yii dataprovider


【解决方案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,
    ),
));

【讨论】:

  • 得到了我正在搜索的确切内容,无论如何谢谢老兄。也对你的回答竖起大拇指。
  • 我正在搜索的确切答案如下所示。如果有用,请检查并点赞
  • 很高兴我能帮上忙 :)
  • 请检查以下给出的答案是否正确。我从中得到了所需的结果。我只是想知道它是否是一个更好的答案
  • 我能想到的不错且高效的解决方案。所以不用担心!
【解决方案2】:

知道了:),我可以使用CActiveDataProvider 代替CArrayDataProvider,如下所示

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

无论如何感谢@Stefano 的回复

【讨论】:

  • 这是一个更好的答案,因为它使 CGridView 能够从 CModel 获取网格标题...
猜你喜欢
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
相关资源
最近更新 更多