访问Yii CSqlDataProvider和Relational Table中的数据

时间:2013-01-22 19:25:13

标签: php mysql yii

我正在尝试加入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',
    ),
)); ?>

2 个答案:

答案 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)

  1. 首先,您需要select已在Phillipe's answer中提到的其他字段:

    SELECT `events`.`id`, `profiles`.`id` ...
    
  2. 最好为profiles.id提供别名,因为列名都是id

    SELECT `events`.`id`, `profiles`.`id` as pid ...
    
  3. 然后在网格中,您可以访问以下列:

    'columns'=>array(
        'pid', // instead of profiles.id
        'id', // instead of events.id
    )