Yii将相关数据导入GridView

时间:2014-09-04 20:50:52

标签: php gridview yii

我的视图让用户可以看到一个人的详细信息,包括他们所在的家庭。这是在DB中完成的,其中包含Person表,Family表和两者之间的familyMembership链接表。

人员的CActiveRecord模型中的关系是这样的:

'families' => array(self::MANY_MANY, 'Family', 'familymembership(Person, Family)'),

在我的人控制器中,我想以一种TbGridView(CGridView但Bootstrap)将接受的方式(数据提供者)将变量传递到具有相关数据的视图中。控制器调用person模型的getFamilies()函数:

public function getFamilies() {
    // returns an array of Family objects related to this Person model
    $familiesArray = $this->getRelated('families');
    // puts this array into a CArrayDataProvider
    $families = new CArrayDataProvider($familiesArray);
    return $families;
}

返回值返回到控制器,然后在renderPartial()调用中传递。该视图的TbGridView小部件初始化如下:

$this->widget('bootstrap.widgets.TbGridView', 
            array(
                //the CArrayDataProvider from the model function
                'dataProvider' => $families, 
                'columns' => array(
                    array(
                        'name' => 'Family Name',
                        // Example field from Family model
                        'value' => '$data->familyName' 
                    )
                )
        ));

然而,在执行此操作时,我收到以下错误: 'Property“Family.id”未定义。 (d:\瓦帕\ WWW \ YII \框架\基\ CComponent.php:130)'

Family模型没有id属性,我不明白为什么小部件正在寻找这样的属性。

这里出了什么问题?

感谢。

1 个答案:

答案 0 :(得分:1)

Yii Class Reference引用文档,您必须提供keyField

  

原始数据数组中的元素可以是对象(例如模型对象)或关联数组(例如DAO的查询结果)。确保将keyField属性设置为唯一标识数据记录的字段的名称,如果没有这样的字段,则确定为false。

默认情况下,keyField将设置为" id",因此您需要使用系列型号主键覆盖它:

<?php
$familyDataProvider = new CArrayDataProvider($rawData, array(
    'keyField' => 'yourPkNameHere',
));