2017-06-21 4 views
2

Ich bin eine Suche zu filtern durch Benutzer, die auf meinem Bildschirm angezeigt werden. Die Anzeige der Benutzer funktioniert ohne die Suche. Wenn ich jedoch einen Namen eintippe und zur Anzeige gehe, erhalte ich eine undefinierte Variable für die Suche.Laravel Inner Join Sprich Variable undefined

$Search = $request->search_code; //print_r($Search);die(); // this works 
    // this next line was used for testing and it works as well 
    //$findTrainers = DB::table('users')->where('users.name', 'like', "%$Search%")->get(); 

    // This is what we want to work, but the search variable is now undefined 
    $findTrainers = DB::table('users') 
      ->join('bios', function ($findTrainers) { 
       $findTrainers->on('users.id', '=', 'bios.user_id') 
       ->where('users.name', 'like', "%$Search%"); 
      }) 
      ->get(); 

Antwort

3

Dies ist aufgrund, wie Verschlüsse und Scoping arbeiten. Verschlüsse wissen nichts über Variablen, die außerhalb ihres Geltungsbereichs definiert sind. Daher müssen Sie einem Schließer mitteilen, dass er diese Variable verwenden soll, wenn Sie im Rahmen des Abschlusses darauf zugreifen möchten:

$findTrainers = DB::table('users') 
    ->join('bios', function ($findTrainers) use ($Search){ 
     $findTrainers->on('users.id', '=', 'bios.user_id') 
      ->where('users.name', 'like', "%$Search%"); 
    }) 
    ->get();