2013-11-15 36 views
1

嗨,我使用Yii建立在模型中的应用的Yii与联接使用CDbCriteria和CActiveDataProvider自定义搜索

我已经修改了搜索(),我想出了一个问题。

用户可以作为管理员,经理,客户

登录当用户登录作为一名经理,他只能从它们属于商店View客户端。到目前为止,我已经设法实现了这一点。

现在的问题是,当我试图阻止管理员在CGridView中查看同一商店的其他经理(因此编辑对方的账户)。

的关系

/** 
* @return array relational rules. 
*/ 
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(
     'authitems' => array(self::MANY_MANY, 'Authassignment', 'authassignment(userid, itemname)'), 
     'additionalContacts' => array(self::HAS_MANY, 'AdditionalContact', 'Client_Id'), 
     'store' => array(self::BELONGS_TO, 'Store', 'Store_Id'), 
     'user' => array(self::BELONGS_TO, 'User', 'User_Id'), 
     'genericPoints' => array(self::HAS_MANY, 'GenericPoint', 'Client_Id'), 
    ); 
} 

定制模型搜索

public function searchCustom() 
{ 
    // Warning: Please modify the following code to remove attributes that 
    // should not be searched. 

    $criteria=new CDbCriteria; 
    $criteria->addCondition('t.id !='.$this->id); 
    $criteria->compare('t.Created',$this->Created,true); 
    $criteria->compare('t.Updated',$this->Updated,true); 
    $criteria->compare('t.Discount',$this->Discount,true); 
    $criteria->compare('t.Discount_Type',$this->Discount_Type,true); 
    $criteria->addCondition('t.Store_Id ='.$this->Store_Id); 

    //$criteria->addCondition('t.id !='.$this->id); 

    //GET FIELDS FROM USER IN SEARCH 

    $criteria->with=array('user'); 
    $criteria->compare('user.id',$this->User_Id,true); 
    $criteria->compare('user.First_Name',$this->First_Name,true); 
    $criteria->compare('user.Last_Name',$this->Last_Name,true); 
    $criteria->compare('user.Username',$this->Username,true); 
    $criteria->compare('user.Email',$this->Email,true); 
    $criteria->addCondition('user.Status = 1'); 

    $criteria->with=array('authitems'); 
    $criteria->compare('authitems.userid',$this->id,false); 
    $criteria->compare('authitems.itemname','client',false); 

    $criteria->together = true; 

    $criteria->order = 't.Created DESC'; 
    return new CActiveDataProvider($this, array(
      'criteria'=>$criteria, 
    )); 
} 

这我得到

CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user.Status' in 'where clause'. The SQL statement executed was: SELECT COUNT(DISTINCT `t`.`id`) FROM `client` `t` LEFT OUTER JOIN `authassignment` `authitems_authitems` ON (`t`.`id`=`authitems_authitems`.`userid`) LEFT OUTER JOIN `authassignment` `authitems` ON (`authitems`.`itemname`=`authitems_authitems`.`itemname`) WHERE (((((t.id !=2) AND (t.Store_Id =1)) AND (user.Status = 1)) AND (authitems.userid=:ycp0)) AND (authitems.itemname=:ycp1)) 

错误,我知道它是与关系的GII为我设置,但我无法找到它。

也许authitems的MANY_MANY关系阻止加载用户关系?

回答

0

而不是使为$criteria->with另一个assignement(这将覆盖前一个),你应该简单地尝试:

$criteria->with=array('user', 'authitems');