2011-12-19 71 views
1

我這裏有一個情況 有兩種型號的用戶,帖子 現在我想通過用戶&帖子中調整的關係,或通過添加到列表發佈的用戶,其用戶類型那些帖子= 1 這是可能的任何類型的範圍?警予關係活動記錄

我現在

User 
'Posts' => array(self::HAS_MANY, 'Post', 'userId'), 

Posts 
'User' => array(self::BELONGS_TO, 'User', 'userId'), 

回答

1

您可以命名範圍或關係做到這一點。例如,你可以定義你的關係是這樣的:

'Posts' => array(self::HAS_MANY, 'Post', 'userId', 'condition' => 't.userType=1') 

關於「命名範圍」讀到這裏: http://www.yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes

+0

不,這不是一個可行的解決方案。我認爲這個關係需要調整 'User'=> array(self :: BELONGS_TO,'User','userId'), – iThink 2011-12-20 07:52:20

0

你想在這裏做什麼已經關係被稱爲關係的ActiveRecord查詢。文檔states

在關係AR查詢時,別名爲主表被固定 爲t,而別名爲一個關係表是相同的默認 對應關係的名稱。例如,在以下 語句中,Post和Comment的別名分別爲t和註釋 。

所以,你需要做的是:

$posts = Posts::model()->findAll('user.userType = 1'); 
+0

感謝您的答覆。但我想使用defaultScope或類似的東西,每次我查詢帖子時,默認應用此搜索條件 – iThink 2011-12-19 15:32:23

1

您可以在飛行中添加的過濾器爲命名範圍調整的關係定義,像這樣的:

class User extends CActiveRecord 
{ 
    public function relations() 
    { 
     return array(
      'Posts'=>array(self::HAS_MANY, 'Post', 'userId', 
       'with'=>array(
        'User'=>array(
         'scopes'=> array(
          'userType' => 1, 
         ), 
        ), 
       ), 
      ), 
     ); 
    } 
} 

更多信息可以在Yii的指南中找到爲relational-query-with-named-scopes