Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

php

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?

like image 952
Azima Avatar asked Dec 06 '25 20:12

Azima


1 Answers

  • 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();
    
like image 139
Muhammad Sadiq Avatar answered Dec 08 '25 11:12

Muhammad Sadiq



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!