我找不到太多關於在yii中將默認範圍應用於模型的文檔,我想知道是否有人能夠向正確的方向解釋或指出我。應用默認範圍引用yii中的關係
快速版本我的問題:
是否有可能的關係添加到默認範圍,或在默認情況下在模型中的每個AR搜索添加「與」標準是什麼?
加長版我的問題:
我的應用程序的快速摘要:
我有兩個型號,provider
和item
。哪個供應商可以擁有多個項目,但每個項目只能擁有一個供應商。
到目前爲止,我有以下關係:
class Provider extends CActiveRecord
{
...
public function relations()
{
return array(
'items' => array(self::HAS_MANY, 'Item', 'id_provider', 'order'=>'rank DESC'),
);
}
...
}
class Item extends CActiveRecord
{
...
public function relations()
{
return array(
'provider' => array(self::BELONGS_TO, 'Provider', 'id_provider'),
);
}
...
}
在我的項目模型,我已經有過濾掉所有脫機項defaultScope(即只顯示設置爲offline = false
項目):
public function defaultScope()
{
$alias = $this->getTableAlias(false,false);
return array(
'condition'=>"`$alias`.`offline` = false",
);
}
我現在想要做的,也是過濾掉其提供商被設置爲離線的項目(即只顯示provider.offline = false
與當前item.offline = false
並排的項目)。
我試過在defaultScope加盟商表:
public function defaultScope()
{
$alias = $this->getTableAlias(false,false);
return array(
'join'=>"JOIN `provider` AS `provider` ON `provider`.`id` = `$alias`.`id_provider`",
'condition'=>"`$alias`.`offline` = false AND `provider`.`offline` = false",
);
}
然而JOIN的ON語句後適用,以及一個根源探析誤差(CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'provider.offline' in 'on clause'
)。
我也試圖與標準的defaultScope添加:
public function defaultScope()
{
$alias = $this->getTableAlias(false,false);
return array(
'with'=>"provider",
'condition'=>"`$alias`.`offline` = false AND `provider`.`offline` = false",
);
}
,但我得到了同樣的錯誤:SQLSTATE [42S22]:列未發現:在1054未知列「provider.offline」'在條款')。
有什麼建議嗎?
當然!我把條件放在主要的「條件」聲明中,而不是在「與」之中。你的第一個建議很完美,謝謝! – Stu 2012-08-16 08:07:53