在 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;

编辑:修复了一些语法问题,因为我的速度有点太快了。