1

私は 1 か月前に Yii を使い始めましたが、非常に直感的ですが、ウィジェットに関してはやや混乱しています。

私が開発しているアプリでは、Active Record を使用することもありますが、MyIsam を使用しているため(そしてこれを変更することはできません)、外部キーをサポートしていないため、その関係を使用できません。

私の問題は、CGridViewがあり、それにカスタム データを追加したいのですが、問題が発生していることです。

右のモデルではFKと1対多の関係ですが、先ほども言いましたがARの魔法が使えません。

これ、アプリケーション モデルとプロファイル モデルがあります。Profile モデルにはアプリケーションFKがあります。

関数を取得したので、CGrid をレンダリングするときに、*id_app* の代わりに各アプリケーションの名前を取得できます。

public function appName($id){
    $app= Yii::app()->db->createCommand()
        ->select('name')
        ->from('tbl_aplications a')
        ->where('a.id=:id_app', array(':id_app'=>$id))
        ->queryRow();

    return $app;
}

自動生成されたテンプレートの Profile Admin.php ビューで、次の情報を取得しました。

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'profile-application-grid',
    'dataProvider'=>$model->search(), //maybe the issue is with this criteria? It is currently 'as-is' after the template generation
    'filter'=>$model,
    'columns'=>array(
        'id',
        'name',
                array(
                    'name'=>'id_app',
                    'header'=>'Aplication',

そして、これが私の問題です、私は試しました(そしてあらゆる種類のバリエーション):

'value' => 'ProfileApplication::model()->appName($data->id_app)',
'value' => 'ProfileApplication::model()->appName(id_app)',
'value' => 'ProfileApplication::model()->appName("id_app")',

各行の値ではなく実際の文字列を渡しているため、結果として得られるのはnullだけです。関数のクエリに直接 ID を渡すと、次のように正しい値が返されます。->where('a.id=:id_app', array(':id_app'=>3))

変更する必要があるのは検索基準ですか? 同様の質問を見つけましたが、それらはすべてProfile->applicationなどの AR を使用しており、前述のとおり、 MyIsam の制限により使用できません。

この新参者へのヒント、または同様の問題に関する解決策へのリンクを歓迎します。

4

2 に答える 2

2

そのような値属性を使用するには、PrplHaz4 が言ったように、データ プロバイダーが必要です。次に、$data 変数に魔法がかかっており、舞台裏で eval() されるため、文字列で使用する必要があります。これはあなたがやろうとしていることの例です:

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'item-grid',
    'dataProvider'=>$model->search(),
    'columns'=>array(
        array(
            'name' => 'id',
            'header' => 'Item ID',

        ),
        array(
            'name' => 'category_search',
            'header' => 'Category',
            'value' => '$data->category->name',
        ),
    ),
)); ?>

これは、関連アイテム カテゴリ モデルの name 属性を取得します。item モデルの Relations() 関数では、次のようになります。

return array(
    'category'=>array(self::BELONGS_TO, 'ItemCategory', 'category_id'),
);

また、アイテム カテゴリ モデルの Relations() 関数では、次のようになります。

return array(
    'items'=>array(self::HAS_MANY, 'Item', 'category_id'),
);
于 2013-05-03T04:35:13.650 に答える