Azima
Azima

Reputation: 4141

How to query related records only using where clause in laravel?

I tried to search students that belong to particular User/School only using the following the query. I have created one-to-many relationship between User and Students.. Everything seems okay but when I try to search students, it gives me list of students that belong to other Users too.

public function searchStudent(Request $request)
{
    $q = $request->q;
    $grades = Auth::user()->grades;
    $searchPupils = Student::where('user_id','=',Auth::user()->id)->where('name','LIKE','%'.$q.'%')->orWhere('email','LIKE','%'.$q.'%')->get();

    if(count($searchPupils) > 0)
    {
        return view('add-class', compact('grades'))->withDetails($searchPupils)->withQuery($q);
    }
    else
    {
        return view ('add-class', compact('grades'))->withMessage('No Details found. Try to search again !');
    }
}

I also tried doing

$searchPupils = Auth::user()->students()->where('name','LIKE','%'.$q.'%')->orWhere('email','LIKE','%'.$q.'%')->get();

Still it searches for the whole Students table . How should it be done?

Upvotes: 3

Views: 482

Answers (1)

Muhammad Sadiq
Muhammad Sadiq

Reputation: 1155

  • the problem is in your query where conditions, use advance where clause as below.

    $searchPupils =Student::where('user_id','=',Auth::user()->id)
                ->where(function($query)use($q){
                       $query->where('name','LIKE','%'.$q.'%')
                            ->orWhere('email','LIKE','%'.$q.'%');
                  })->get();
    

Upvotes: 2

Related Questions