I'm trying to implement a function in my controller to filter users of the application by their roles
My controller ProfileController.php has the following function:
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]);
}
My view membre2.blade.php has the following HTML code:
<form action="/membre2" method="get">
<input type="text" name="filter" >
<button type="submit">filter</button>
</form>
The error i'm getting is:
Parse error: syntax error, unexpected '}'
Any help would be appreciated!
You are missing a ;
in the if
statement
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]);
}
Missing ;
after ->orWhere('roles.description','like','%'.$filter.'%')
Code with Updated Indent
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]);
}
Indent make your code more readable. There are different styles of indention. You can understand them better via this
You should take a look on 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]);
}
The instructions in the closure given to when() will only be applied if the first argument is evaluated to true, that way you'll be able to write complex conditional instructions without having to break the query chain.
You should provide more information about your erorr if it will not help.