Yii条件关系 [英] Yii conditional relation
问题描述
我有一个聊天
表中的字段
admin TINYINT
owner_id INTEGER
目标是在Yii中有两个关系:
$ b $
'admin'=> array(
self :: BELONGS_TO,'Admin','owner_id',
'condition' =>'admin = 1',
),
'user'=> array(
self :: BELONGS_TO,'User','owner_id',
'condition'=>'admin = 0',
),
,我得到了一般错误:1没有这样的列:admin
,并且只能通过添加 all_ones
和 all_zeros
列到Admin表,所以我可以写
'admin'=> array(
self :: BELONGS_TO,'Admin',array('owner_id'=>'id','admin'=>'all_ones'),
),
$ b $'user'=>数组(
self :: BELONGS_TO,'User', array('owner_id'=>'id','admin'=>'all_zeros'),
),
解决方案1:解决方案1:解决方案1:
把你的关系放到用户模型上(因为关系条件不过滤相关模型,而不是定义关系的模型)
//在用户模型上:
'chatsAdmin'=>数组(
self :: HAS_MANY,'Chat' ,'owner_id',
'condition'=>'admin = 1',
),
'chats'=> array(
self :: HAS_MANY,Chat ','owner_id',
'condition'=>'admin = 0',
),
解决方案2:
使用finder获得一组过滤的聊天(或DataProvider)
'user'=> array(self :: BELONGS_TO,'User','owner_id')$ b $
b
// finder在聊天模式,将返回ALL(使用CActiveDataProvider,如果你需要分页..)
Chat :: model() - > with('user') - > findAll('user.admin =:admin',array(':admin'=> 1))
I have a chat
table with fields
admin TINYINT
owner_id INTEGER
The goal is to have two relations in Yii:
'admin'=>array(
self::BELONGS_TO, 'Admin', 'owner_id',
'condition'=>'admin=1',
),
'user'=>array(
self::BELONGS_TO, 'User', 'owner_id',
'condition'=>'admin=0',
),
However, I got General error: 1 no such column: admin
, and could manage only by adding all_ones
and all_zeros
columns to Admin table, so I could write
'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'),
),
What is the way I could implement that without using such a hacks?
Solution 1:
Put your relations on User model (because the relation condition does filter the related model, not the model the relation is defined on)
//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',
),
Solution 2:
Use finder to get a filtered set of Chats (or 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))
这篇关于Yii条件关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!