2014-04-23 83 views
0

我是yii的新會員。我有三個型號機型
時,即時通訊選址的下拉我需要的用戶屬於該站點yii的關係錯誤

Site(id,name) 
User(id,name,..) 
UserSite(id,user_id,site_id) 

我需要的是

在用戶模式的關係是 'userSites' => array(self::BELONGS_TO, 'UserSite', 'id'),

而搜索功能用戶模型是,

public function search($sid) 
    { 
     // @todo Please modify the following code to remove attributes that should not be searched. 

     $criteria=new CDbCriteria; 

     $criteria->compare('id',$this->id); 
     $criteria->compare('customer_id',$this->customer_id,true); 
     $criteria->compare('email',$this->email,true); 
     $criteria->compare('password',$this->password,true); 
     $criteria->compare('name',$this->name,true); 
     $criteria->compare('company',$this->company,true); 
     $criteria->compare('country',$this->country,true); 
     $criteria->compare('date_added',$this->date_added,true); 
       $criteria->compare('expiry_date',$this->expiry_date,true); 
       if($sid!=null) 
       { 
        $criteria->with = array('userSites'); 
        $criteria->addCondition('userSites.site_id='.$sid); 
       } 

     return new CActiveDataProvider($this, array(
      'criteria'=>$criteria, 

     )); 
    } 

這裏發生的是顯示用戶喜歡(user.id=user_site.id)但實際上我需要(user.id=user_site.user_id)

現在這種關係'userSites' => array(self::BELONGS_TO, 'UserSite', 'id'),返回UserSite->id什麼,我需要它必須返回UserSite->User_id

請有人幫我解決這個問題..

回答

0

你的關係是反向的。每個User可以有很多UserSite小號therfore你們的關係應該是

'userSites' => array(self::HAS_MANY, 'UserSite', 'user_id') 

要急於負載關係的CActiveDataProvider你必須設置CDbCriteria::togethertrue

if($sid!=null){ 
    $criteria->together = true; 
    ... 

對此的解釋是在http://www.yiiframework.com/wiki/280/1-n-relations-sometimes-require-cdbcriteria-together/

給出

但跟蹤應用程序的查詢顯示,當CActiveDataProvide r獲取數據,它處理1:n相關表有點不同。 AR從父表和1:1相關子表中獲取數據,其中一個查詢加入所有那些1:1子表。 1:n個子表不屬於此查詢的一部分。 AR從後續查詢中獲取數據,每個1:n子表使用一個查詢,使用WHERE PK IN(id1,id2,...)子句指定所需的行。

+0

我已經嘗試過,當時它的獲取錯誤CDbCommand未能執行SQL語句:SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'userSites.site_id'。執行的SQL語句是:SELECT't'.'id' AS't0_c0','t'.'customer_id' AS't0_c1','t'.'email' AS''t0_c2','t'.password' as't0_c3','t'.namename' as't0_c4','t'.'company' as't0_c5','t'.country' as as't0_c6','t'.'date_added' as' t0_c7','t'.expiry_date' AS't0_c8' FROM'user'' t' WHERE(userSites.site_id = 4)LIMIT 100 – Salini

+0

我已經編輯了我的答案。 – topher

+0

嘿它固定的代碼是$ criteria-> together = true;謝謝.. – Salini