php - 如何将模型数据对象数组转换为dataProvider

标签 php model yii dataprovider

假设我有一个模型User,它与其自身有多对多的关系,名为friends。 所以 $user->friends (或 View 中的 $model->friends)给了我一个 User 对象数组。我想将 friend 显示为 GridView 。但是 CGridView 数据作为 dataProvider 对象。谷歌搜索找到了将模型对象数组转换为 dataProvider 对象的方法,如下所示。

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

现在使用这个我得到一个错误

Property "User.id" is not defined.

更新

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

关于php - 如何将模型数据对象数组转换为dataProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14134653/

相关文章:

php - Twig 模板 - 在数组中访问数组

javascript - 更改字符串中每个单词的字体颜色(JS 或 PHP)

mongodb - Mongoose.find() 如何查询属性大于某个数字或值为空或属性不存在的文档?

php - Yii2:从供应商目录中的 Controller 运行控制台命令

Yii2 - 与多列有很多关系

php preg_match 破折号的使用

asp.net-mvc - 一旦写入ValidationSummary(),就从ModelState中移除ModelErrors

Django用L返回用户模型ID

php - Yii 一个模型用于多个表

php - 如何从表单字段更新多个 mysql 行