我已经在一个月前开始了Yii,并且发现它非常直观,但是对于小部件却有点混淆。Yii - CGridView 1-to-N显示问题
在我正在开发的应用程序中,虽然我有时使用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;
}
在自动生成的模板,在配置文件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")',
和我得到的是空的结果,因为它是通过实际的字符串,而不是每行的价值。如果我通过直接的ID给函数的查询,它返回正确的值,如->where('a.id=:id_app', array(':id_app'=>3))
是否需要改变搜索条件? 我发现了类似的问题,但他们都使用AR,如配置文件 - >应用程序或沿着这些线和我说,我不能使用它,因为MyIsam限制。
任何提示都会被这个新手所赞赏,或者链接到一个关于类似问题的解决方案。
用MyISAM的唯一的一点是,它不会自动 - 在生成模型时检测您的关系。然而,你可以把这些关系放在你自己身上,而你将拥有你想要的所有魔法。有关如何使用value属性来访问相关模型的属性,请参阅我的答案。 – JPR 2013-05-03 04:38:05