访问视图Yii CSqlDataProvider和关系表中的数据


Access data in view Yii CSqlDataProvider and Relational Table

我试图在CSqlDataProvider加入一个关系表profiles,但它不是工作属性。

如何访问视图中的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',
    ),
)); ?>
  1. 首先,当然你需要select其他字段已经在Phillipe的回答中提到:

    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
    )
    

您可以将它添加到您的SQL查询

$sql = "SELECT `events`.`id`, `profiles`.`id`
        FROM events
        LEFT OUTER JOIN `profiles` ON (`events`.`profile_id`=`profiles`.`id`)";

但是你好像已经有个人资料了。Id在你的事件中所以你可以在你的视图中使用它:

<?php $this->widget('bootstrap.widgets.TbGridView',array(
    'type'=>'striped bordered condensed',
    'id'=>'events-grid',
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        'profile_id',
        'events.id',
    ),
)); ?>