0

問題:CDbCriteriaが間違った結果を出力します。

モデル検索機能です。

public function summary()
    {
        // Warning: Please modify the following code to remove attributes that
        // should not be searched.

        $criteria=new CDbCriteria;
        $criteria->select = 't.*';

        if (Yii::app()->user->checkAccess('Reviewer')):
            $criteria->addSearchCondition('t.reviewers',Yii::app()->user->id,false, 'AND');
        endif;

        if (Yii::app()->user->checkAccess('Implementer')):
            $criteria->addSearchCondition('t.implementers',Yii::app()->user->id,false, 'OR');
        endif;

        if (Yii::app()->user->checkAccess('Creator')):
            $criteria->compare('t.creator',Yii::app()->user->id, false, 'OR');
        endif;

        $criteria->compare('request_type_id',$this->request_type_id);
        $criteria->compare('request_category_id',$this->request_category_id);
        $criteria->compare('financial_type_id',$this->financial_type_id);
        $criteria->compare('urgency_id',$this->urgency_id);
        $criteria->compare('eta_date',$this->eta_date,true);

        if (Yii::app()->user->checkAccess('Reviewer') || Yii::app()->user->checkAccess('Implementer')):
            $criteria->join   = "JOIN profiles p ON (p.user_id = t.creator)";
            if($this->creator):
                $criteria->addSearchCondition('p.firstname',$this->creator, true, 'AND');
            endif;
        endif;

        if(isset($this->status)):
            $criteria->compare('t.status',$this->status);
        endif;



        $data = new CActiveDataProvider(get_class($this), array(
                'criteria'=>$criteria,
                'pagination'=>false,
        ));
        $_SESSION['all'] = $data;


        $data = new CActiveDataProvider(get_class($this), array(
                'pagination'=>array('pageSize'=> Yii::app()->user->getState('pageSize',
                        Yii::app()->params['defaultPageSize']),),
                'criteria'=>$criteria,
        ));
        $_SESSION['limited'] = $data; 

        return $data;
    }

上記のコードは、CWebLogRouteでトレースしたときにクエリを出力しましたが、レコードがありません。

SQLのクエリ:SELECTt。* request tFROMJOINプロファイルpON(p.user_id = t.creator)WHERE t.reviewers LIKE:ycp1 LIMIT 10

これらのクエリを次のクエリに変更すると、レコードが出力されました。

SELECTt 。* request t FROMJOINプロファイルpON(p.user_id = t.creator)WHERE t.reviewers LIKE'%3%' LIMIT 0、30

どうすれば問題を解決できますか?

4

1 に答える 1

1

変更してみてください

$criteria->addSearchCondition('t.reviewers',Yii::app()->user->id,false, 'AND');

$criteria->addSearchCondition('t.reviewers',Yii::app()->user->id, true, 'AND');

また、の形式reviewersとレコードへの書き込み方法も確認してください。「3」、「3」、または「3」として記録されている可能性があります。

によってレコードを更新する必要がありますupdate request set reviewers = trim(reviewers)

于 2012-11-18T17:11:42.920 に答える