Searching by name and date between codeigniter 4

Hello everyone I’m creating report through the fetched data, I created search based on category, amount and date between. But the problem is that, If I entered category and trigger the search button I get the data, And If I set the dates between to range it aslo returning the data. But if I set both category and dates between it only see the category and ignores the where condition between date range. Help please.

//html form

   <form method="post" action="">
      <input type="text" name="search" />
      <input type="date" name="startDate" />
      <input type="date" name="endDate" />

//model method

    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]);
                           ->orderBy('date', 'DESC');
         return $query;


Looking at the documentation –

It appears that you would have to do the following of setting the entire WHERE array at one time. I’ve used the code above to attempt to set that up properly.

$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->groupBy('date')->orderBy('date', 'DESC');
return $query;

Edit: Fixed some syntax issues because I was moving a little too fast.

Leave a Reply

Your email address will not be published. Required fields are marked *