Amir Amir
Amir Amir

Reputation: 3

How to search an item by category and location in laravel simultaneously

The items have category_id and location_id which has relation to tables category and location. The search form has 3 fields, 1 item keyword, 2nd is the category selection and 3rd is its location. The user has to fill all the fields in order to be able to search. The problem is that the search works only for the first input field and brings all the items with the same name but location and categories are not filtered during search...

public function search(Request $request) {
      $query = $request->input('query');
      $cQuery = $request->input('subCategoryId');
      $pQuery = $request->input('province');
      
      $subCategories = Business::where('name', 'like', "%$query%")
      ->where('province_id', 'like', "%$pQuery%")
      ->where('sub_category_id', 'like', "%$cQuery%")->get();


    return view('pages.search-result')
    ->with('subCategories', $subCategories);
    }

Upvotes: 0

Views: 1001

Answers (1)

Digvijay
Digvijay

Reputation: 8947

I have assumed that you have the relations setup for all the models. If not, please go through Defining Relationships.

Consider the below answer as a skeleton example for what you are looking for.

$businesses = Business::where('name', 'like', '%' . $query . '%')
    ->with('province', 'subCategory')
    ->whereHas('province', function ($q) use ($pQuery) {
        $q->where('name', 'like', '%' . $pQuery . '%');
    })
    ->whereHas('subCategory', function ($q) use ($cQuery) {
        $q->where('name', 'like', '%' . $cQuery . '%');
    })
    ->get();

Upvotes: 0

Related Questions