Php 模型类中提到的条件未从搜索表单执行

Php 模型类中提到的条件未从搜索表单执行,php,yii-extensions,yii,Php,Yii Extensions,Yii,我在高级搜索表单(approved,reviewdate)中有两个字段,我为它们创建了单选按钮 <div class="row"> <?php echo $form->labelEx($model,''); ?> <?php echo $form->radioButtonList($model,'ReviewedDate', array('1' => 'Reviewed', '' => 'Not Reviewed'),

我在高级搜索表单(approved,reviewdate)中有两个字段,我为它们创建了单选按钮

<div class="row">
<?php echo $form->labelEx($model,''); ?>
<?php
    echo $form->radioButtonList($model,'ReviewedDate',
    array('1' => 'Reviewed', '' => 'Not Reviewed'),
    array(
          'template'=>'{input}{label}',
          'separator'=>'',
          'labelOptions'=>array(
                        'style'=> '
                                  padding-left:13px;
                                  width: 60px;
                                  float: left;
                                 '),
          'onclick' => 'this.form.submit()', 
          'style'=>'float:left;',
          )                             
      );
        ?>
  <div style="clear: both;"></div>
  <?php echo $form->error($model,'ReviewedDate'); ?>
 </div>


   <div class="row">
<?php echo $form->labelEx($model,''); ?>
<?php
    echo $form->radioButtonList($model,'Approved',
    array('0' => 'Rejected', '1' => 'Approved'),
    array(
          'template'=>'{input}{label}',
          'separator'=>'',
          'labelOptions'=>array(
                        'style'=> '
                                  padding-left:13px;
                                  width: 60px;
                                  float: left;
                                 '),
          'style'=>'float:left;',
          'onclick' => 'this.form.submit()', 
          'uncheck' => NULL,
          )                             
      );
        ?>
  <div style="clear: both;"></div>
  <?php echo $form->error($model,'Approved'); ?>
 </div>
现在,当我尝试单击Review/not Review按钮时,应该在单击rejected时执行的查询将被执行

SQL query to be executed - SELECT count(*) FROM `message_template` `t`  LEFT OUTER JOIN `apartment` `apartment` ON (`t`.`ApartmentId`=`apartment`.`Id`)  WHERE (((MessageType=1) AND (updateddate = createddate)) AND (ReviewedDate IS NULL);


SQL executed - SELECT * FROM `message_template` `t`  LEFT OUTER JOIN `apartment` `apartment` ON (`t`.`ApartmentId`=`apartment`.`Id`)  WHERE (((MessageType=1) AND (updateddate > createddate)) AND (ReviewedDate IS NULL) and (Approved=0));
为什么会发生这种情况以及如何调试

编辑 *控制器*


您正在使用
$criteria->condition=''$criteria->addCondition()后的code>

使用
$criteria->condition=''
您为CDbCriteria对象设置了一个全新的条件,这意味着您以前所有的
$criteria->addCondition()丢失

因此,改变这一点,例如:

$criteria->addCondition("approved='" . $this->Approved . "'");
$criteria->condition = ' (updateddate > createddate) AND (revieweddate IS NOT NULL) and approved = 0 ';
为此:

$criteria->addCondition("approved='" . $this->Approved . "'");
$criteria->addCondition("(updateddate > createddate) AND (revieweddate IS NOT NULL)");

这段代码几乎是正确的:

if ($this->Approved) 
           {

                  $criteria->addCondition("approved='" . $this->Approved . "'");
                  $criteria->condition = ' (updateddate > createddate) AND (revieweddate IS NOT NULL) and approved = 1 ';
            }
            else 
            {

                  $criteria->addCondition("approved='" . $this->Approved . "'");
                  $criteria->condition = ' (updateddate > createddate) AND (revieweddate IS NOT NULL) and approved = 0 ';
            }
正如“davey”所说,您必须“清理”您的搜索函数,例如,您可能会这样更改代码:

if ($this->Approved) 
           {
           //this line is unnecessary     $criteria->addCondition("approved='" . $this->Approved . "'");
                  $criteria->addCondition(' (updateddate > createddate) AND (revieweddate IS NOT NULL) and approved = 1 ');
            }
            else 
            {
            //this line is unnecessary      $criteria->addCondition("approved='" . $this->Approved . "'");
                 $criteria->addCondition(' (updateddate > createddate) AND (revieweddate IS NOT NULL) and approved = 0 ');

       //if you dont want   approved = 0 then you must change above line with:
                  $criteria->addCondition(' (updateddate > createddate) AND (revieweddate IS NOT NULL) ');



            }
if(isset($this->Approved)){
  if($this->Approved==0){
    ...
  }elseif($this->Approved==1){
    ...
  }else{
    throw new CHttpExeption(404,'unknown approval');
  }
}
要调试:

首先,您确定要通过GET发送表单参数吗

<form action="/controller/action" method="get">
因此,如果未提交任何内容->则不会添加任何标准

希望这有帮助


致以最诚挚的问候

你能给我们看一下你的控制器代码吗?@davey我粘贴了我的控制器你能在你的模型中发布你的rules()方法吗?这显示了一个不同的querySQL-选择计数(不同的
t
Id
)从
消息模板
t
左外连接
公寓
公寓
上(
t
ApartmentId
=
ApartmentId
Id
),其中(((((MessageType=:ycp0)和(updateDate=createDate))和(reviewDate=NULL))和(approved=”)和((updateDate>createDate)和(reviewDate不为NULL)和approved=0))
if ($this->Approved) 
           {
           //this line is unnecessary     $criteria->addCondition("approved='" . $this->Approved . "'");
                  $criteria->addCondition(' (updateddate > createddate) AND (revieweddate IS NOT NULL) and approved = 1 ');
            }
            else 
            {
            //this line is unnecessary      $criteria->addCondition("approved='" . $this->Approved . "'");
                 $criteria->addCondition(' (updateddate > createddate) AND (revieweddate IS NOT NULL) and approved = 0 ');

       //if you dont want   approved = 0 then you must change above line with:
                  $criteria->addCondition(' (updateddate > createddate) AND (revieweddate IS NOT NULL) ');



            }
<form action="/controller/action" method="get">
if(isset($this->Approved)){
  if($this->Approved==0){
    ...
  }elseif($this->Approved==1){
    ...
  }else{
    throw new CHttpExeption(404,'unknown approval');
  }
}