在 codeigniter 4 之间按名称和日期搜索
Searching by name and date between codeigniter 4
大家好我正在通过获取的数据创建报告,我创建了基于类别、数量和日期之间的搜索。但问题是,如果我输入类别并触发搜索按钮,我会得到数据,如果我将日期设置为范围,则返回数据。但是,如果我同时设置类别和日期,它只会看到类别并忽略日期范围之间的 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-for-specific-data
看来您必须执行以下操作,一次设置整个 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;
编辑:修复了一些语法问题,因为我的速度有点太快了。
大家好我正在通过获取的数据创建报告,我创建了基于类别、数量和日期之间的搜索。但问题是,如果我输入类别并触发搜索按钮,我会得到数据,如果我将日期设置为范围,则返回数据。但是,如果我同时设置类别和日期,它只会看到类别并忽略日期范围之间的 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-for-specific-data
看来您必须执行以下操作,一次设置整个 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;
编辑:修复了一些语法问题,因为我的速度有点太快了。