2013-11-15 34 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');