2014-09-04 80 views
0

我的视图让用户看到一个人的详细信息,包括他们所在的家族。这是在DB中使用Person表,Family表和FamilyMembership链接表完成的。Yii将相关数据导入GridView

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

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

在我一个人控制,我想一个变量传递到具有在某种程度上的相关数据认为TbGridView(CGridView但Bootstrap)会接受(一个数据提供者)。控制器调用模型人的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' 
        ) 
       ) 
     )); 

然而,在这样做,我收到以下错误: “属性‘Family.id’没有定义。 (D:\ wamp \ www \ yii \ framework \ base \ CComponent.php:130)'

家族模型没有id属性,我不明白为什么widget正在寻找这样的东西。

这里怎么回事?

谢谢。

回答

1

Yii Class Reference引用的文档,你必须提供一个keyField

Elements in the raw data array may be either objects (e.g. model objects) or associative arrays (e.g. query results of DAO). Make sure to set the keyField property to the name of the field that uniquely identifies a data record or false if you do not have such a field.

默认keyField将被设置为“ID”,所以你需要与你的家庭模式的主键将其覆盖:

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

感谢您的帮助! – 2014-09-04 22:52:19