$data = DB::table('users')
->select('users.id', 'users.firstname', 'users.lastname', 'users.email')
->whereNotIn('users.id', $usersEnrolled)
->where(function($query) use ($query) {
$query->where('firstname', 'LIKE', "%{$query}%")
->orwhere('lastname', 'LIKE', "%{$query}%")
->orwhere('email', 'LIKE', "%{$query}%")
})
->orderBy('lastname')
->take(25)
->get();
You should always group orWhere calls in order to avoid unexpected behavior when global scopes are applied.