Yii条件关系 [英] Yii conditional relation

查看:207
本文介绍了Yii条件关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个聊天表中的字段

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆