我有一個模型,其關係定義如下。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')),
);
}
兩個鏈接表和鏈接的項目有一個有效的範圍:
public function scopes() {
return array(
'valid'=>array(
'condition'=>"t.`valid`=1",
),
);
}
爲了使生成的連接查詢與關係範圍內的工作,我不得不修改範圍如下:
public function scopes() {
return array(
'valid'=>array(
'condition'=>"`linkingTable`.`valid`=1",
),
);
}
和:
public function scopes() {
return array(
'valid'=>array(
'condition'=>"`linkedItems`.`valid`=1",
),
);
}
問題是直接鏈接的模型,即:
$linkedItems = LinkedItem::model()->valid()->findAll();
導致錯誤常說linkedItems
不是一個定義的別名時,這些範圍將無法正常工作。當然,這是可以理解的。這也導致需要任何其他模型誰想要擁有一些LinkedItems需要以完全相同的方式定義關係。
是唯一的解決方案定義不同的範圍爲每個用例,這樣的:
public function scopes() {
return array(
'valid'=>array(
'condition'=>"t.`valid`=1",
),
'validForModelRelation'=>array(
'condition'=>"`linkedItems`.`valid`=1",
)
);
}
這感覺有點cludgey。我想知道是否有更好的方法來做到這一點?
'getTableAlias()'工作一種享受,謝謝。 「
valid
= 1。」! – bcmcfc