2014-09-06 59 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。