Yii - usando relações com escopos definidos na relação
Eu tenho um modelo com algumas relações definidas da seguinte forma.
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')),
);
}
Tanto a tabela de vinculação quanto os itens vinculados têm um escopo válido:
public function scopes() {
return array(
'valid'=>array(
'condition'=>"t.`valid`=1",
),
);
}
Para que as consultas de junção geradas trabalhem com o escopo da relação, tive que modificar os escopos da seguinte maneira:
public function scopes() {
return array(
'valid'=>array(
'condition'=>"`linkingTable`.`valid`=1",
),
);
}
e:
public function scopes() {
return array(
'valid'=>array(
'condition'=>"`linkedItems`.`valid`=1",
),
);
}
O problema é que esses escopos não funcionarão quando usados diretamente no modelo vinculado, ou seja:
$linkedItems = LinkedItem::model()->valid()->findAll();
Resulta em erro ao dizer quelinkedItems
não é um alias definido. O que é compreensível, claro. Isso também resulta na necessidade de qualquer outro modelo que queira possuir alguns LinkedItems que precisem definir a relação exatamente da mesma maneira.
É a única solução para definir um escopo diferente para cada caso de uso, como este:
public function scopes() {
return array(
'valid'=>array(
'condition'=>"t.`valid`=1",
),
'validForModelRelation'=>array(
'condition'=>"`linkedItems`.`valid`=1",
)
);
}
Isso parece um pouco cludgey. Eu estou querendo saber se existe uma maneira melhor de fazer isso?