Php 模型类中提到的条件未从搜索表单执行
我在高级搜索表单(approved,reviewdate)中有两个字段,我为它们创建了单选按钮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'),
<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');
}
}