我的视图让用户可以看到一个人的详细信息,包括他们所在的家庭。这是在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属性,我不明白为什么小部件正在寻找这样的属性。
这里出了什么问题?
感谢。
答案 0 :(得分:1)
从Yii Class Reference引用文档,您必须提供keyField
:
原始数据数组中的元素可以是对象(例如模型对象)或关联数组(例如DAO的查询结果)。确保将keyField属性设置为唯一标识数据记录的字段的名称,如果没有这样的字段,则确定为false。
默认情况下,keyField
将设置为" id",因此您需要使用系列型号主键覆盖它:
<?php
$familyDataProvider = new CArrayDataProvider($rawData, array(
'keyField' => 'yourPkNameHere',
));