Laravel内部联接说变量undefined

时间:2017-06-21 02:09:24

标签: php mysql laravel

我正在搜索以过滤屏幕上显示的用户。用户的显示在没有搜索的情况下正在工作。但是当我在搜索中输入一个名字,然后去显示它时,我得到一个未定义的搜索变量。

    $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();

1 个答案:

答案 0 :(得分:3)

这是由于关闭和范围的工作原理。闭包不知道在其作用域之外定义的变量,因此当你想在闭包范围内访问它时,必须告诉闭包使用该变量,如下所示:

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