2017-05-05 9 views
4

次のクエリを使用して、特定のユーザー/学校に属する学生を検索しようとしました。私はユーザーと学生の間に1対多の関係を作りました。すべては大丈夫ですが、学生を検索しようとすると、他のユーザーに属する学生のリストも表示されます。laravelのwhere句のみを使用して関連レコードをクエリする方法はありますか?

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 !'); 
    } 
} 

私も

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

をやっそれでも、それは全体の学生テーブルを検索してみました。どのようにそれを行う必要がありますか?

答えて

2
  • 問題は条件の下で次のようにwhere where節を使用するクエリにあります。助けのための

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

感謝。 :) – Azima

+0

@アジマ歓迎です。 –

+0

$ q変数をクロージャに渡す必要もあるようです。 (function)($ query)use($ q){ $ query- > '%'); - > orWhere( '電子メール'、 'LIKE'、 '%'); $ q。 '%'); })ここで、( '名前'、 'LIKE'、 '%' - > get(); – Azima

関連する問題