通过laravel角色过滤用户的小系统

时间:2018-06-08 08:17:56

标签: php mysql sql laravel laravel-5

我正在尝试在我的控制器中实现一个函数,以按角色过滤应用程序的用户

我的控制器ProfileController.php具有以下功能:

public function membrevis() {

    $filter = isset($_GET['filter']) ? $_GET['filter'] : null;

    $users = DB::table('users')
        ->join('user_role', 'user.id', '=', 'user_role.user_id')
        ->join('roles', 'users_roles.role_id', '=', 'roles.id')
        ->where('users.valid','=',0)
        ->select('users.*','roles.description');

    if ($filter != null) {
        $users->where('users.name','like','%'.$filter.'%')
              ->orWhere('roles.description','like','%'.$filter.'%')
    }

    $users->get(); 
    return view('member2',['users'=> $users]);
}

我的观点membre2.blade.php有以下HTML代码:

<form action="/membre2" method="get">
    <input type="text" name="filter" >
    <button type="submit">filter</button>
</form>

我得到的错误是:

Parse error: syntax error, unexpected '}'

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:0)

您在;声明

中缺少if
public function membrevis() {

$filter = isset($_GET['filter']) ? $_GET['filter'] : null;


$users = DB::table('users')
    ->join('user_role', 'user.id', '=', 'user_role.user_id')
    ->join('roles', 'users_roles.role_id', '=', 'roles.id')
    ->where('users.valid','=',0)
    ->select('users.*','roles.description');


   if($filter != null) {
   $users->where('users.name','like','%'.$filter.'%')
        ->orWhere('roles.description','like','%'.$filter.'%');
   }
     $users->get(); 
           return view('member2',['users'=> $users]);

         }

答案 1 :(得分:0)

;

之后遗失->orWhere('roles.description','like','%'.$filter.'%')

更新缩进的代码

public function membrevis()
{

    $filter = isset($_GET['filter']) ? $_GET['filter'] : null;


    $users = DB::table('users')
        ->join('user_role', 'user.id', '=', 'user_role.user_id')
        ->join('roles', 'users_roles.role_id', '=', 'roles.id')
        ->where('users.valid','=',0)
        ->select('users.*','roles.description');


    if($filter != null)
    {
        $users->where('users.name','like','%'.$filter.'%')
            ->orWhere('roles.description','like','%'.$filter.'%');
    }

    $users->get();

    return view('member2',['users'=> $users]);

}

缩进使您的代码更具可读性。有不同的压痕风格。您可以通过this

更好地理解它们

答案 2 :(得分:0)

您应该查看Conditional Clauses

    public function membrevis() {

    $filter = isset($_GET['filter']) ? $_GET['filter'] : null;


    $users = DB::table('users')
        ->join('user_role', 'user.id', '=', 'user_role.user_id')
        ->join('roles', 'users_roles.role_id', '=', 'roles.id')
        ->where('users.valid','=',0)
        ->when($filter, function ($query) use ($filter) {
            return $query->where('users.name','like','%' . $filter . '%')
                   ->orWhere('roles.description','like','%' . $filter . '%');
                })
        ->select('users.*','roles.description')
        ->get();


   return view('member2',['users'=> $users]);
 }

只有当第一个参数被评估为true时才会应用给予when()的闭包中的指令,这样你就可以编写复杂的条件指令而不必破坏查询链。

如果没有帮助,您应该提供有关您的错误的更多信息。