Yii条件关系

时间:2012-11-29 22:15:21

标签: activerecord yii foreign-keys

我有一个带有字段<{p>>的chat

 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_onesall_zeros列来管理,所以我可以写

        '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'),
        ),

如果不使用这样的黑客,我可以实现哪些方法?

1 个答案:

答案 0 :(得分: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:

使用finder获取一组过滤的Chats(或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))