Как проверить, является ли значение электронной почты пользователя нулевым?

#laravel #null

#laravel #null

Вопрос:

Я пытаюсь аутентифицировать 2 пользователей по наследству в проекте Laravel.

В моей миграции у меня есть только 1 столбец, который может быть нулевым, этот столбец — электронная почта. В этом столбце я ожидаю двойной аутентификации профессоров и выпускников, у меня также есть 2 типа регистров, в одном есть входной адрес электронной почты, а в другом нет. В моей базе данных у меня есть 2 пользователя, один — профессор, а другой выпускник, у профессора есть электронная почта, а у другого также есть электронная почта, потому что они принадлежат к одной таблице, но это электронное письмо имеет значение NULL в строке выпускного столбца.

Я пытаюсь проверить, когда я вхожу в систему, имеет ли этот пользователь столбец электронной почты значение null, мое представление возвращает alumn. Если это не null, мой просмотр возвращает professor.

Я попытался проверить, является ли значение электронной почты нулевым в моем контроллере Laravel.

Это мой код

 public function index()
{
    $user = User::where('email', '=', Input::get('email'))->first();
    if ($user == 'NULL'){
        return ('alumn');
    }
    if ($user != 'null'){
        return ('professor');
    }
}
  

И мой маршрутизатор Laravel выглядит следующим образом.

 Route::get('/home', 'HomeController@index')->name('home');
  

Я также попробовал эту функцию в своем контроллере вместо другой.

 if (User::where('email', '=', Input::get('email'))->count() > 0) {
   // user found
}
  

И с помощью exists() вместо count().

Если вам интересно, я возвращаю просто строку прямо сейчас в целях тестирования.

Ответ №1:

Проблема, с которой вы столкнулись, находится в ваших условных обозначениях. ($user == 'NULL') и ($user != 'null') . Что вы проверяете в данный момент, если пользовательским объектом является следующая строка: "NULL" .

Это не то, как вы проверяете значение null. Есть много вариантов, которые будут работать.

     if (empty($user)){
        return view('alumn');
    }

    // OR

    if (!$user) {
        return view('alumn');
    }

    // OR

    if (is_null($user)) {
        return view('alumn');
    }
  

Сработало бы. Вы также могли бы использовать is_null . Если вы хотели проверить, что user равен null , вы не можете заключать null в кавычки.

Комментарии:

1. или $user === null (без кавычек)

Ответ №2:

first() Метод вернет null , если данных нет, поэтому используйте is_null() вместо этого, например :

 if ( is_null($user) ) {
    return view('alumn');
}else{
    return view('professor');
}
  

Ответ №3:

К вашему сведению, first() вернет вам значение null, когда в базе данных нет данных, поэтому я надеюсь, что это поможет вам

 public function index()
{
    $user = User::where('email', '=', Input::get('email'))->first();

    if ( is_null($user) ) {
        return view('alumn');
    } else {
        return view('professor');
    }
}
  

Ответ №4:

Все ответы выше не сработали в моем случае. Итак, я сделал это, чтобы оно того стоило.

 public function index()
{
    $user = Auth::user();
    if ($user->email == ''){
        return ('alumne');
    }
    else{
        return ('professor');
    }
    print_r(Auth::user());
}
  

Сначала я напечатал свой Auth::user, чтобы проверить, все ли работает правильно, затем я попытался сохранить аутентификацию в переменной с именем user.
Затем я проверил с помощью условия, и все работало нормально.

Ответ №5:

 public function index() {
    $user = User::where('email', '=', Input::get('email'))->first();

    if (empty($user)) {
        return view('alumn');
    } else {
        return view('professor');
    }
}