2013-01-22 55 views
0

我試圖加入關係表profilesCSqlDataProvider,但它不是工作屬性。在視圖中訪問數據Yii 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
  1. 首先ofcourse你需要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 
    ) 
    
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', 
    ), 
)); ?> 
+0

如果我使用'events'.'profile_id'它的工作原理,但'profiles'.'id'不工作,總是返回NULL。我需要使用相關的,因爲我會使用除ID之外的其他字段。 –

+0

你只能在mysql中測試這個sql請求嗎? phpMyadmin顯示結果是什麼? –

+0

SQL正在返回正確的數據'events.id'和'profiles.id'。我想問題是在試圖獲取'profiles.id'時TbGridView。 –