在CActiveDataProvider标准中使用STAT关系

时间:2011-08-12 08:45:24

标签: yii

这是我的控制器动作

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 tid)FROM brano t WHERE(propostoCount = 1 AND pubblicatoCount = 1 AND pendingCount = 1 AND rifiutatoCount = 1 AND chiusiCount> 0)

1 个答案:

答案 0 :(得分:3)

我可以看到你在这里尝试做什么,比较查询中的STAT关系值吧?

我遇到了同样的问题,但STAT关系没有以这种方式实现。它们是在单独的查询中从数据库中提取的,因此只能在PHP中使用,而不能在SQL本身中使用。

如果您希望使用STAT关系获得条件,则必须在查询中将其重新定义为完整的子选择(或者取决于查询类型的内容)。