0

一个表Product包含与一个表的 has_many 关系,该表**Slab**进一步包含与一个表的 has_many 关系Rate

一个关系查询被包裹在里面CActiveDataProvider,它通过某些参数连接三个表,并以它们各自费率的降序返回产品。

我想通过 以表格形式显示结果CGridView

尝试通过以下语法仅访问某些列:

$this->widget('zii.widgets.grid.CGridView', array(
                'dataProvider'=>$dataProvider,
                'columns'=>array(
                    'name','slabs.id','slabs.rates.rate'
                )
            ));

不幸的是我无法访问slabs.id,因为当我转储dataProvider对象时,我看到它通过包含对象Product的数组附加到对象,然后在对象下有对象。index[0]SlabSlabindex[0]rates.rate

这可能是由于表之间的 has_many 关系而发生的,但我的查询将始终返回一个对象Slab和一个Rate对象。

我如何访问和显示它们?

4

1 回答 1

0

我想有两种可能的解决方法。

1. 更改或添加关系,以便您可以访问具有 has_one 关系的平板和费率。

2. 您可以使用自定义名称和值向 gridview 添加列,如下所示:

'columns'=>array(
    'name',
    array(
        'name' => 'Slab Id',
        'value' => '$data->slabs[0]->id',
    ),
    array(
        'name' => 'Rate',
        'value' => '$data->slabs[0]->rates[0]->rate',
    )
)

其中 value 是表示要评估的表达式的字符串。$data 是主要模型,在本例中为 Product。

于 2014-09-07T10:55:53.947 回答