【问题标题】:Yii conditional relationYii 条件关系
【发布时间】:2012-11-29 22:15:21
【问题描述】:

我有一个带有字段的 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 表来进行管理,所以我可以编写

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

在不使用此类黑客的情况下,我可以通过什么方式实现它?

【问题讨论】:

    标签: activerecord yii foreign-keys


    【解决方案1】:

    解决方案 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:

    使用查找器获取一组过滤的聊天(或数据提供者)

    //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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      相关资源
      最近更新 更多