私は 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 の制限により使用できません。
この新参者へのヒント、または同様の問題に関する解決策へのリンクを歓迎します。