我有专栏keyword
,date filter
和status
现在,
我希望在发送数据字符串中的所有变量时使用ajax,
搜索其工作正常,但是当我发送关键字和其他字段为空时它不起作用?我想知道当某个字段值传递为空时如何设置WHERE clause
。
Data String : keyword=assignment&date=created&fromdate=&todate=
在cakephp控制器中传递字符串,但因为日期归档空查询无效。
的Ajax
$('#keyword, #fromdate, #todate, input[name="status"]').on('change',function(){
var status = "";
if($('input[name="status"]').is(':checked')) {
var val = $('input[name="status"]:checked').val();
status = '&status='+val;
}
var keyword = $('#keyword').val();
var date = $('#date').val();
var fromdate = $('#fromdate').val();
var todate = $('#todate').val();
var data = 'keyword='+keyword+'&date='+date+'&fromdate='+fromdate+'&todate='+todate+status;
console.log(data);
$.ajax({
url:HOST+'assignments/assignment_search',
type:'POST',
data:data,
beforeSend : function() {
$('#all_assignment').html('<div id="loading_div"><img src="/img/loading.gif"/></div>');
},
success: function(data){
if(data != "")
{
$('#all_assignment').html(data);
}
}
});
});
控制器:
$where = "WHERE ";
if(isset($this->data['status'])) {
$status_val = $this->data['status'];
$where .= "Assignment.status = $status_val";
}
if(!empty($keyword)) {
$where .= "Assignment.title LIKE '%$keyword%'";
}
if($fromdate != "" && $todate != "") {
$where .= " AND DATE_FORMAT(Assignment.created, '%Y-%m-%d') BETWEEN $fromdate AND $todate";
}
$assignment = $this->Assignment->query("
SELECT * FROM assignments as Assignment
$where
");
我想在where
子句中添加变量,如果它不为空。请帮我查询一下。
答案 0 :(得分:0)
在放置“AND”关键字时,您需要更加小心。 在我看来,在某些情况下,您生成的查询将缺少一些“AND”字。
答案 1 :(得分:0)
你应该使用find方法更容易,使用find方法你可以更好地定义你的条件:
$conditions = array();
if(isset($this->data['status'])) {
$conditions['Assignment.status'] = $this->data['status'];
}
if(!empty($keyword)) {
$conditions['Assignment.title like'] = '%'.$keyword.'%';
}
if($fromdate != "" && $todate != "") {
$conditions['Assignment.created between ? and ?'] = array($fromdate, $todate);
}
当你在find()中使用它们时,它们将被自动放入一个带有'AND'运算符的查询中,现在你的CakePHP find()应该是这样的:
$assignment = $this->Assignment->find('all',array('conditions'=>$conditions));
我没有测试过该代码以检查它是否没有错误,但是一旦你根据自己的需要调整它就可以正常工作。