我有一个带有字段<{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_ones
和all_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'),
),
如果不使用这样的黑客,我可以实现哪些方法?
答案 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))