【问题标题】:Yii Get Related Data into a GridViewYii 获取相关数据到 GridView
【发布时间】:2014-09-04 20:50:51
【问题描述】:

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

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

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

但是,在执行此操作时,我收到以下错误: '未定义属性“Family.id”。 (D:\wamp\www\yii\framework\base\CComponent.php:130)'

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

这里出了什么问题?

谢谢。

【问题讨论】:

    标签: php gridview yii


    【解决方案1】:

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

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

    默认情况下keyField 将设置为“id”,因此您需要使用 Family 模型主键覆盖它:

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

    【讨论】:

    • 感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多