相关疑难解决方法(0)

Yii - 使用与关系中定义的范围的关系

我有一个模型,其中一些关系定义如下.

public function relations()
{
    return array(
        'linkingTable' => array(self::HAS_MANY, 'LinkingTable', array('this_id'=>'id'), 'scopes'=>array('valid')),
        'linkedItems' => array(self::HAS_MANY, 'LinkedItem', array('linked_item_id'=>'id'), 'through'=>'linkingTable', 'scopes'=>array('valid')),
    );
}
Run Code Online (Sandbox Code Playgroud)

链接表和链接项都具有有效范围:

public function scopes() {
    return array(
        'valid'=>array(
            'condition'=>"t.`valid`=1",
        ),
    );
}
Run Code Online (Sandbox Code Playgroud)

为了使生成的连接查询能够与关系范围一起使用,我必须修改范围,如下所示:

public function scopes() {
    return array(
        'valid'=>array(
            'condition'=>"`linkingTable`.`valid`=1",
        ),
    );
}
Run Code Online (Sandbox Code Playgroud)

和:

public function scopes() {
    return array(
        'valid'=>array(
            'condition'=>"`linkedItems`.`valid`=1",
        ),
    );
}
Run Code Online (Sandbox Code Playgroud)

问题是当直接从链接模型使用时,这些范围将不起作用,即:

$linkedItems = LinkedItem::model()->valid()->findAll();
Run Code Online (Sandbox Code Playgroud)

导致错误表示linkedItems不是已定义的别名.当然,这是可以理解的.它还导致需要任何其他想要拥有某些LinkedItem的模型,这些LinkedItem需要以完全相同的方式定义关系.

是为每个用例定义不同范围的唯一解决方案,如下所示:

public function scopes() {
    return array(
        'valid'=>array(
            'condition'=>"t.`valid`=1",
        ),
        'validForModelRelation'=>array(
            'condition'=>"`linkedItems`.`valid`=1",
        )
    );
} …
Run Code Online (Sandbox Code Playgroud)

php yii

4
推荐指数
1
解决办法
6707
查看次数

标签 统计

php ×1

yii ×1