YII dataProvider关系CDbCriteria

时间:2014-09-19 12:00:31

标签: php yii render criteria dataprovider

我在控制器索引操作中使用CDbCriteria时遇到问题。我有2个课程:活动和与会者。 类事件有很多与会者,我希望我的事件索引操作只呈现当前登录用户是与会者的事件列表...

  $criteria = new CDbCriteria(array(                    
                            'order'=>'event_date desc',
                            'with'   => array('attendees'=>array('alias'=>'attend')),
                            'condition'=>'attend.uid = ' . Yii::app()->user->id,
                    ));
  $dataProviderAtt=new CActiveDataProvider('Event',
                    array(
                    'criteria'  => $criteria,
                            )
            );

  $this->render('index',array(
        'dataProvider'=>$dataProviderAtt,
    ));

这在带有消息的DB中不起作用:     CDbCommand无法执行SQL语句:SQLSTATE [42000]:语法错误或访问冲突:1066不唯一的表/别名:'用户'

我在与会者班级的关系设置如下:

public function relations() { // NOTE: you may need to adjust the relation name and the related // class name for the relations automatically generated below. return array( 'user' => array(self::BELONGS_TO, 'YumProfile', 'uid', 'alias'=>'user'), ); }

我尝试更改与会者模型中的defaultscope并定义多个别名:

   public function defaultScope()
{
  static $counter = 0;
   return array(
         'with' => array('user'=>array('alias'=>'user'.($counter++))),
         //'with' => 'user',
      'order' => 'score DESC',
     );
 }

但它似乎没有解决问题,然后我有更多的错误。我的标准是否正确设置? 谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

您正在寻找

'on' => 'attend.uid = ' . Yii::app()->user->id,

与您与用户的关系

function relations()
{
    return array(
        'user' => array(
            self::BELONGS_TO,
            'attendees',
            '',
            'on' => 'attendees.uid = ' . Yii::app()->user->id,
        ),
    );
}