0

我正在尝试在 中加入关系表profilesCSqlDataProvider但它不是工作属性。

我怎样才能profiles.id在视图中访问?

控制器.php:

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

$dataProvider=new CSqlDataProvider($sql);

查看.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',
    ),
)); ?>
4

2 回答 2

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',
    ),
)); ?>
于 2013-01-22T19:29:26.347 回答
0
  1. 首先,您需要菲利普的回答select中已经提到的其他领域:

    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
    )
    
于 2013-01-23T13:50:19.103 回答