Yii - Verwenden von Beziehungen mit Gültigkeitsbereichen, die in der Beziehung definiert sind

Ich habe ein Modell mit einigen Beziehungen wie folgt definiert.

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

Sowohl die Verknüpfungstabelle als auch die verknüpften Elemente haben einen gültigen Bereich:

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

Damit die generierten Join-Abfragen mit dem Beziehungsbereich funktionieren, musste ich die Bereiche wie folgt ändern:

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

und:

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

Das Problem ist, dass diese Bereiche nicht funktionieren, wenn sie direkt vom verknüpften Modell verwendet werden, d. H .:

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

Das führt zu einem Fehler, das zu sagenlinkedItems ist kein definierter Alias. Was natürlich verständlich ist. Dies führt auch dazu, dass jedes andere Modell, das ein paar LinkedItems besitzen möchte, die Beziehung auf die gleiche Weise definieren muss.

Ist die einzige Lösung, die für jeden Anwendungsfall einen anderen Gültigkeitsbereich definiert:

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

Das fühlt sich ein bisschen klobig an. Ich frage mich, ob es einen besseren Weg gibt, dies zu tun?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage