0

テーブルにはテーブルとの has_many関係が含まれ、さらにProductテーブルとのhas_many 関係が含まれます。**Slab**Rate

リレーショナル クエリが内部にラップされCActiveDataProvider、特定のパラメーターで 3 つのテーブルが結合され、それぞれのレートの降順で製品が返されます。

を通じて結果を表形式で表示したいCGridView

次の構文を使用して特定の列のみにアクセスしようとしています:

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

残念ながら、オブジェクトslabs.idをダンプすると、オブジェクトを含む配列を介しdataProviderてオブジェクトに追加されていることがわかり、オブジェクトの下にオブジェクトがあるため、アクセスできません。Productindex[0]SlabSlabindex[0]rates.rate

テーブル間の has_many 関係が原因で発生している可能性がありますが、私のクエリは常に 1 つとSlab1 つのRateオブジェクトを返します。

それらにアクセスして表示するにはどうすればよいですか?

4

1 に答える 1

0

考えられる回避策は2つあると思います。

1. 関係を変更または追加して、has_one 関係でスラブとレートにアクセスできるようにします。

2. 次のように、カスタムの名前と値を使用して、グリッドビューに列を追加できます。

'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 に答える