在YIi中建立关系的条件

时间:2012-06-05 03:45:01

标签: yii

代理:

agent_id (primary key)

用户:

f_id (foreign key)
type

我以这种方式创建了关系

public function relations() {
    return array(
        'user' => array(self::HAS_ONE, 'Users', 'f_id'),
    );
}

但我想在User表中添加 type=3 时添加更多条件,例如加入。

感谢。

3 个答案:

答案 0 :(得分:8)

在您的关系中添加条件

public function relations() {
    return array(
        'user' => array(self::HAS_ONE, 'Users', 'f_id', array(
            'condition' => 'user.type = :type',
            'params' => array(':type'=>3)
        )),
    );
}

http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-options

答案 1 :(得分:6)

没有像'属性'这样的错误CHasOneRelation.0“未定义'如果你使用它:

public function relations()
{
    return array(
        'user' => array(
            self::HAS_ONE, 
            'Users', 
            'f_id',
            'on' => 'user.ref_type = :type', 
            'params' => array(':type' => 3))
    );
}

请参阅此链接:http://www.yiiframework.com/forum/index.php/topic/10185-using-relations-and-conditions/

答案 2 :(得分:0)

您应该创建一个函数来让用户使用延迟加载,即使您不使用此关系也会使用更多查询。

public function getUser(){
    return Users::model()->find(array(
        'condition'=>'type = :type', 
        'params' => array(':type'=>3)
    ));  
}

通过使用它,您可以使用缓存功能来缓存关系不支持的查询。

public function getUser(){
    return Users::model()->cache(1000)->find(array(
        'condition'=>'type = :type', 
        'params' => array(':type'=>3)
    ));  
}