2017-06-21 75 views
2

我正在執行搜索以篩選屏幕上顯示的用戶。用戶的顯示器在沒有搜索的情況下工作。但是,當我輸入搜索名稱,並去顯示它,我得到一個未定義的變量進行搜索。Laravel內部聯接說變量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(); 

回答

3

這是由於封閉和範圍界定如何工作。閉包不知道變量定義在範圍之外,所以當你想在閉包的範圍內訪問它時,必須告訴閉包使用該變量,如下所示:

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