2

我有一个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, 并且只能通过在 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'),
        ),

在不使用这样的黑客的情况下,我可以用什么方法来实现它?

4

1 回答 1

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 获取一组过滤的聊天(或 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))
于 2012-11-30T07:37:48.363 回答