2014-09-06 30 views
0

一个表Product包含与表**Slab**还含有与表Rate的has_many关系的has_many关系的子对象。如何访问Yii的关联查询

关系查询被打包在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]包含Slab对象,然后在Slab对象index[0]rates.rate对象。

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

我该如何访问并显示它们?

+0

检查此链接http://www.yiiframework.com/wiki/385/displaying-sorting-and-filtering-hasmany-manymany-relations-in-cgridview/ – 2014-09-06 05:47:29

回答

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

当值表示表达式的字符串进行评估。 $ data是主要模型,在这种情况下是Product。