Home > Enterprise >  How to check if the search query contains some result or not in laaravel 8
How to check if the search query contains some result or not in laaravel 8

Time:01-19

I am trying to find if search query contains result , if not then return null here is the code , but even the search is not present in DB it is showing previous search results

if (!empty($searchInput)) {
    $complexityLevel->join('organizations', 'complexity_levels.organization_id', '=', 'organizations.id');
    $complexityLevel->where("complexity_levels.name", "like", "%$searchInput%")
        ->orWhere("complexity_levels.experience_range_start", "like", "%$searchInput%")
        ->orWhere("complexity_levels.experience_range_end", "like", "%$searchInput%")
        ->orWhere("organizations.name", "like", "%$searchInput%")
    $complexityLevel->select('complexity_levels.*', 'organizations.name');                   
} 

if (!empty($complexityLevel))  {
    return  $complexityLevel->orderBy($sortBy, $sortOrder)->paginate($pageSize);
}
return null;

CodePudding user response:

In your case you are checking if $complexityLevel is not empty. But it will not be empty since it's a query, not a collection as you expect. To do what was intended you'd need something like this:

if (!empty($searchInput)) {
    $complexityLevel->join('organizations', 'complexity_levels.organization_id', '=', 'organizations.id')
        ->select('complexity_levels.*', 'organizations.name')
        ->where("complexity_levels.name", "like", "%$searchInput%")
        ->orWhere("complexity_levels.experience_range_start", "like", "%$searchInput%")
        ->orWhere("complexity_levels.experience_range_end", "like", "%$searchInput%")
        ->orWhere("organizations.name", "like", "%$searchInput%")
        ->orderBy($sortBy, $sortOrder)
        ->paginate($pageSize);                   
} 
return count($complexityLevel) ? $complexityLevel : null;

CodePudding user response:

If you want to check if $complexityLevel is not empty, you can use -> isNotEmpty()

In your query case

if (empty($searchInput)) {
  return null;
}

$complexityLevel->query()
   ->join( ... )
   ->where( ... )
   ....
   ->orderBy($sortBy, $sortOrder)
   ->paginate($pageSize);

if ($complexityLevel->isNotEmpty()) {
  return $complexityLevel;
}

return null;

or you can also check when empty

if ($complexityLevel->isEmpty()) {
  return null;
}

Here is some reference: https://laravel.com/api/8.x/Illuminate/Contracts/Pagination/Paginator.html

  • Related