Yii - używanie relacji z zakresami zdefiniowanymi w relacji

Mam model z pewnymi relacjami zdefiniowanymi w następujący sposób.

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

Zarówno tabela łączenia, jak i połączone elementy mają prawidłowy zakres:

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

Aby wygenerowane kwerendy łączenia działały z zakresem relacji, musiałem zmodyfikować zakresy w następujący sposób:

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

i:

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

Problem polega na tym, że zakresy te nie będą działać, gdy zostaną użyte bezpośrednio z połączonego modelu, tj .:

$linkedItems = LinkedItem::model()->valid()->findAll();

Powoduje błąd, aby to powiedziećlinkedItems nie jest zdefiniowanym pseudonimem. Co jest zrozumiałe, oczywiście. Powoduje to również potrzebę dowolnego innego modelu, który chce posiadać niektóre LinkedItem, które muszą dokładnie zdefiniować relację.

Jest jedynym rozwiązaniem, aby zdefiniować inny zakres dla każdego przypadku użycia, taki jak ten:

public function scopes() {
    return array(
        'valid'=>array(
            'condition'=>"t.`valid`=1",
        ),
        'validForModelRelation'=>array(
            'condition'=>"`linkedItems`.`valid`=1",
        )
    );
}

To wydaje się trochę niezgrabne. Zastanawiam się, czy jest lepszy sposób na zrobienie tego?

questionAnswers(2)

yourAnswerToTheQuestion