Laravel Проверка наличия записи

169

Я новичок в Laravel. Извините, пожалуйста, вопрос новичка, но как мне найти запись?

<?php

$user = User::where('email', '=', Input::get('email'));

Что я могу сделать здесь, чтобы увидеть, есть ли у $user запись?

  • 2
    Для начала вам нужно выполнить findOrFail () или аналогичный по запросу $ user
  • 7
    это не очень помогает
Показать ещё 3 комментария
Теги:
eloquent
conditional
laravel-5

17 ответов

401
Лучший ответ

Это зависит от того, хотите ли вы работать с пользователем или только проверить, существует ли он.

Если вы хотите использовать пользовательский объект, если он существует:

$user = User::where('email', '=', Input::get('email'))->first();
if ($user === null) {
   // user doesn't exist
}

И если вы хотите только проверить

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

Или даже приятнее

if (User::where('email', '=', Input::get('email'))->exists()) {
   // user found
}
  • 11
    если вы вызываете exists() для несуществующей записи, то это дает ошибку: Call to a member function exists() on null
  • 21
    @ Volatil3 Вы делаете что-то не так. Вы не можете позвонить существует после того, как вы уже выполнили запрос
Показать ещё 10 комментариев
16

Одним из лучших решений является использование метода firstOrNew или firstOrCreate.

  • 4
    пока не подходит вопрос, все же очень полезные функции. Разница между ними заключается в том, что firstOrNew создает экземпляр модели, вызываемой в то время, как firstOrCreate мгновенно сохраняет запрашиваемую модель, поэтому вам нужно обновить изменения в модели firstOrCreate.
6
if($user->isEmpty()){
    // has no records
}

Eloquent использует коллекции. Смотрите следующую ссылку: https://laravel.com/docs/5.4/eloquent-collections

  • 1
    Да, но это не возвращение коллекции. Он возвращает один объект модели, так как вы предполагаете, что у каждого пользователя есть уникальный email поэтому ->isEmpty() выдаст ошибку.
  • 0
    А что, если я получу следующую ошибку: Call to a member function isEmpty() on null
3
if (User::where('email', Input::get('email'))->exists()) {
    // exists
}
1
if ($u = User::where('email', '=', $value)->first())
{
   // do something with $u
   return 'exists';
} else {
  return 'nope';
}

будет работать с try/catch

→ get() по-прежнему возвращает пустой массив

1

Laravel 5.6.26v

найти существующую запись по первичному ключу (email или id)

    $user = DB::table('users')->where('email',$email)->first();

затем

      if(!$user){
             //user is not found 
      }
      if($user){
             // user found 
      }

включить "использовать БД" и имя таблицы пользователь становится множественным числом, используя приведенный выше запрос, как пользователь для пользователей

0

Созданный ниже метод (для себя), чтобы проверить, существует ли данный идентификатор записи в таблице БД или нет.

private function isModelRecordExist($model, $recordId)
{
    if (!$recordId) return false;

    $count = $model->where(['id' => $recordId])->count();

    return $count ? true : false;
}

// To Test
$recordId = 5;
$status = $this->isModelRecordExist( (new MyTestModel()), $recordId);

Дом помогает!

0

Я думаю, что ниже путь является самым простым способом достижения того же:

    $user = User::where('email', '=', $request->input('email'))->first();
    if ($user) {
       // user doesn't exist!
    }
0
$user = User::where('email', '=', Input::get('email'))->first();
if ($user === null) {
   // user doesn't exist
}

можно записать как

if (User::where('email', '=', Input::get('email'))->first() === null) {
   // user doesn't exist
}

Это вернет true или false без назначения временной переменной, если это все, для чего вы используете $ user в исходной инструкции.

0

Проверка на null в операторе if позволяет Laravel возвращать 404 сразу после завершения запроса.

if ( User::find( $userId ) === null ) {

    return "user does not exist";
}
else {
    $user = User::find( $userId );

    return $user;
}

Кажется, что он запускает двойной запрос, если пользователь найден, но я не могу найти другого надежного решения.

  • 0
    Вы можете заменить find where . User::where(id, 1)->first()
0

Это проверит, существует ли конкретный адрес электронной почты в таблице:

if (isset(User::where('email', Input::get('email'))->value('email')))
{
    // Input::get('email') exist in the table 
}
0

вы можете использовать проверку laravel.

Но этот код также хорош:

$user = User::where('email',  $request->input('email'))->count();

if($user > 0)
{
   echo "There is data";
}
else
   echo "No data";
0
$user = User::where('email', request('email')->first();
return (count($user) > 0 ? 'Email Exist' : 'Email Not Exist');
0

В вашем контроллере

$this->validate($request, [
        'email' => 'required|unique:user|email',
    ]); 

В вашем представлении - отображение уже существующего сообщения

@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif
  • 0
    Лучшее решение! Но мне нужно изменить имя таблицы и добавить имя столбца электронной почты: required|unique:users,email|email
0

Проще узнать, есть ли какие-либо записи или нет

$user = User::where('email', '=', Input::get('email'))->get();
if(count($user) > 0)
{
echo "There is data";
}
else
echo "No data";
-2

Кратчайшие рабочие варианты:

// if you need to do something with the user 
if ($user = User::whereEmail(Input::get('email'))->first()) {

    // ...

}

// otherwise
$userExists = User::whereEmail(Input::get('email'))->exists();
-7

это простой код для проверки электронной почты, который существует или нет в базе данных


    $data = $request->all();
    $user = DB::table('User')->pluck('email')->toArray();
    if(in_array($user,$data['email']))
    {
    echo 'existed email';
    }

  • 6
    Если у вас есть таблица User с ... скажем, более 1 000 000 000 записей, вы будете проверять очень долго
  • 0
    И у тебя тоже может быть нехватка памяти ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню