我想知道是否有一种方法可以检测是否在 yii 的 AR 搜索中使用了范围?
例如,一个模型可能包含 2 个作用域:
class MyModel extends CActiveRecord
{
...
function myScope1()
{
$this->getDbCriteria()->mergeWith(array(
'join'=>'etc...',
'condition'=>'foo = bar',
));
return $this;
}
function myScope2()
{
$this->getDbCriteria()->mergeWith(array(
'join'=>'etc...',
'condition'=>'foo2 = bar2',
));
return $this;
}
....
}
我这样称呼AR:
$results = MyModel::model()->myScope1()->myScope2()->findAll();
这是一个非常动态的站点,有超过 2 个范围,有些使用,有些没有。如果正在使用另一个范围,则有几个范围不应应用。为了避免数百条if else
语句,我可以这样做:
class MyModel extends CActiveRecord
{
...
function myScope1()
{
$this->getDbCriteria()->mergeWith(array(
'condition'=>'foo = bar',
));
return $this;
}
function myScope2()
{
if($this->appliedScopes('myScope1')==false)
{
// scope myScope1 isn't applied, so apply this scope:
$this->getDbCriteria()->mergeWith(array(
'condition'=>'foo2 = bar2',
));
}
return $this;
}
....
}