2
這是我的控制器操作使用STAT關係
public function actionIndex()
{
//Supervisor non possono vedere brani OPEN
//Gerard (manager) non puo' vedere OPEN/REJECTED/PROPOSED/CLOSED
//Editor non puo' vedere APERTO/PROPOSTO/REJECTED se non suo
$with = array(
'propostoCount',
'pubblicatoCount',
'pendingCount',
'apertoCount',
'rifiutatoCount',
'chiusiCount',
);
$condition = 'propostoCount=1 AND pubblicatoCount=1 AND pendingCount=1 AND rifiutatoCount=1 AND chiusiCount>0';
$dataProvider=new CActiveDataProvider('Brano', array(
'criteria'=>array(
'with'=>$with,
'condition'=>$condition,
'order'=>'id DESC',
),
'pagination'=>array(
'pageSize'=>5,
),
));
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
}
而這些都是我在Brano型號關係:
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'proposto' => array(self::HAS_ONE, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_PROPOSED, 'order'=>'ultimo_aggiornamento DESC'),
'pubblicato' => array(self::HAS_ONE, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_PUBLISHED, 'order'=>'ultimo_aggiornamento DESC'),
'pending' => array(self::HAS_ONE, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_PENDING, 'order'=>'ultimo_aggiornamento DESC'),
'aperto' => array(self::HAS_ONE, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_OPEN, 'order'=>'ultimo_aggiornamento DESC'),
'rifiutato' => array(self::HAS_ONE, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_REJECTED, 'order'=>'ultimo_aggiornamento DESC'),
'chiusi' => array(self::HAS_MANY, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_CLOSED, 'order'=>'ultimo_aggiornamento DESC'),
'propostoCount'=>array(self::STAT, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_PROPOSED),
'pubblicatoCount'=>array(self::STAT, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_PUBLISHED),
'pendingCount'=>array(self::STAT, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_PENDING),
'apertoCount'=>array(self::STAT, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_OPEN),
'rifiutatoCount'=>array(self::STAT, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_REJECTED),
'chiusiCount'=>array(self::STAT, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_CLOSED),
);
}
當我嘗試運行它,它說:
CDbCommand無法執行SQL語句:SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'propostoCount'。執行的SQL語句是:SELECT COUNT(DISTINCT t
id
。)FROM brano
t
WHERE(propostoCount = 1 AND pubblicatoCount = 1 AND pendingCount = 1 AND rifiutatoCount = 1 AND chiusiCount> 0)
我不認爲你很理解關係是如何工作的,你可能想看看這裏的文檔(http://www.yiiframework.com/doc/guide/1.1/en/database.arr)。具體來說,請參閱關於使用與參數[命名範圍](http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-named-scopes)關係的章節可能適用於你想要做的事情。你不會在「condition」屬性中使用關係名稱,如果它是相同的連接,我不相信它會使用多個「with」。 (使用「with」提前加入。) – ldg