我正在尝试加入profiles
处的关系表CSqlDataProvider
,但它不是有效的属性。
如何在视图中访问profiles.id
?
Controller.php这样:
$sql = "SELECT `events`.`id`
FROM events
LEFT OUTER JOIN `profiles` ON (`events`.`profile_id`=`profiles`.`id`)";
$dataProvider=new CSqlDataProvider($sql);
View.php:
<?php $this->widget('bootstrap.widgets.TbGridView',array(
'type'=>'striped bordered condensed',
'id'=>'events-grid',
'dataProvider'=>$dataProvider,
'columns'=>array(
'profiles.id', // Problem here, always returns NULL.
'events.id',
),
)); ?>
答案 0 :(得分:0)
您可以将其添加到SQL查询
$sql = "SELECT `events`.`id`, `profiles`.`id`
FROM events
LEFT OUTER JOIN `profiles` ON (`events`.`profile_id`=`profiles`.`id`)";
但是你似乎已经在你的活动中有了profile.id,所以你可以在你的视图中使用它:
<?php $this->widget('bootstrap.widgets.TbGridView',array(
'type'=>'striped bordered condensed',
'id'=>'events-grid',
'dataProvider'=>$dataProvider,
'columns'=>array(
'profile_id',
'events.id',
),
)); ?>
答案 1 :(得分:0)
首先,您需要select
已在Phillipe's answer中提到的其他字段:
SELECT `events`.`id`, `profiles`.`id` ...
最好为profiles.id
提供别名,因为列名都是id
:
SELECT `events`.`id`, `profiles`.`id` as pid ...
然后在网格中,您可以访问以下列:
'columns'=>array(
'pid', // instead of profiles.id
'id', // instead of events.id
)