2012-11-29 74 views
2

我有一個chat表的字段Yii的條件關係

admin TINYINT 
owner_id INTEGER 

的目標是有兩個關係中的Yii:

'admin'=>array(
    self::BELONGS_TO, 'Admin', 'owner_id', 
    'condition'=>'admin=1', 
), 

'user'=>array(
    self::BELONGS_TO, 'User', 'owner_id', 
    'condition'=>'admin=0', 
), 

但是,我得到General error: 1 no such column: admin,而只能通過增加all_ones管理和all_zeros列到Admin表,所以我可以寫

 'admin'=>array(
      self::BELONGS_TO, 'Admin', array('owner_id' => 'id', 'admin' => 'all_ones'), 
     ), 


     'user'=>array(
      self::BELONGS_TO, 'User', array('owner_id' => 'id', 'admin' => 'all_zeros'), 
     ), 

我可以在不使用這種黑客的情況下實現該目標的方式是什麼?

回答

3

解決方案1:

放在用戶模型的關係(因爲關係條件會過濾相關的模式,而不是關係上定義的模型)

//On the User model: 

'chatsAdmin'=>array(
    self::HAS_MANY, 'Chat', 'owner_id', 
    'condition'=>'admin=1', 
), 
'chats'=>array(
    self::HAS_MANY, 'Chat', 'owner_id', 
    'condition'=>'admin=0', 
), 

解決方案2:

使用取景器得到過濾集聊天(或DataProvider中)的

//relation on chat (without condition!) 
'user'=>array(self::BELONGS_TO, 'User', 'owner_id') 

//finder on chat model, will return ALL (use CActiveDataProvider if you need paging..) 

Chat::model()->with('user')->findAll('user.admin=:admin', array(':admin'=>1))