大家好,我通过提取的数据创建报告,我根据类别、金额和日期创建了搜索。但问题是,如果我输入类别并触发搜索按钮,我就会得到数据,如果我将日期设置为之间的范围,同时返回数据。但如果我同时设置了类别和日期,它只会看到类别,而忽略日期范围之间的where条件。请帮忙。
//html表单
<form method="post" action="">
<input type="text" name="search" />
<input type="date" name="startDate" />
<input type="date" name="endDate" />
</form>
//模型方法
public function show($data = array())
{
$search = $data['search'];
$startDate = $data['startDate'];
$endDate = $data['endDate'];
$query = $this->table($this->table)->select("*", false);
!(empty($endDate))? $query->like('category', $search): null;
!(empty($startDate))? $query->where('date >=', $startDate): null;
!(empty($endDate))? $query->where('date <=', $endDate): null;
$query->where(['provId' => $this->accessId]);
$query->groupBy('date')
->orderBy('date', 'DESC');
return $query;
}
查看文档-https://codeigniter.com/user_guide/database/query_builder.html#looking-针对特定数据
看来您必须一次设置整个WHERE数组。我已经使用了上面的代码来尝试正确设置它。
$query = $this->table($this->table)->select("*", false);
$whereArray = [];
if($endDate) {
$whereArray['category'] = $search;
$whereArray['date <='] = $endDate;
}
if($startDate) {
$whereArray['date >='] = $startDate;
}
$whereArray['provId'] = $this->accessId;
$query->where($whereArray);
$query->groupBy('date')->orderBy('date', 'DESC');
return $query;
编辑:修复了一些语法问题,因为我移动得有点太快了。