0

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',
    ),
)); ?>
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 に答える