-3

This is my controller code:

public function searchUser(Request $request)
{
    $pram = $request->name;

    $data['users'] = User::whereHas('userBasicInfo', function ($query) use ($pram) {
        $query->where('first_name', 'like', '%' . $pram . '%')
            ->orWhere('middle_name', 'like', '%' . $pram . '%')
            ->orWhere('last_name', 'like', '%' . $pram . '%');
    })->with(['userBasicInfo' => function ($query) use ($pram) {
        $query->where('first_name', 'like', '%' . $pram . '%')
            ->orWhere('middle_name', 'like', '%' . $pram . '%')
            ->orWhere('last_name', 'like', '%' . $pram . '%');
    }])->get();

    return $data;
}

I have relationship of user with userBasicInfo; I can search with first_name, middle_name and last_name and my request parameter is name.

Now I want to search with user email and there will be one more request parameter which is email and email is in users table.

How I can search with user email as well?

halfer
  • 19,824
  • 17
  • 99
  • 186
syed1234
  • 761
  • 5
  • 12
  • 30

1 Answers1

1

Try like

$data['users'] = User::with('userBasicInfo')
            ->where('email', 'like', '%' . $pram . '%') //this is from use table
            ->orWhereHas('userBasicInfo', function($query) use($pram) {
                //search in basic info table
                $query->where('first_name', 'like', '%' . $pram . '%')
                    ->orWhere('middle_name', 'like', '%' . $pram . '%')
                    ->orWhere('last_name', 'like', '%' . $pram . '%');
            })
            ->get();

You don't need to send different value from the search form. A single value can be used as the search value.

zahid hasan emon
  • 6,023
  • 3
  • 16
  • 28