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


258

Я новичок в Laravel. Прошу прощения за вопрос новичка, но как мне найти запись?

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

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


2
Чтобы начать, вам нужно выполнить findOrFail () или аналогичный по запросу $ user
Марк Бейкер

9
это не очень помогает
Бен

1
Тогда что это делает? Почему это не помогает? $user = User::where('email', '=', Input::get('email'));просто создает запрос $user, вам нужно выполнить этот запрос. findOrFail()это один из способов выполнения этого запроса. get()был бы другой путь, firstOrFail()другой
Марк Бейкер

2
Если предложение «действительно не помогает», попробуйте сказать, почему оно не помогает, потому что таким образом это означает, что мы знаем, как улучшить / изменить это предложение
Марк Бейкер

учтите это i.imgur.com/ulqyOiw.png нет необходимости заново изобретать колесо
nikoss

Ответы:


566

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

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

$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
}

20
если вы звоните exists()против несуществующей записи, то выдает ошибку:Call to a member function exists() on null
Volatil3

36
@ Volatil3 Вы делаете что-то не так. Вы не можете позвонить существует после того, как вы уже
выполнили

7
@lukasgeiter думаю, ты прав. Я уже звонилfirst()
Volatil3

1
Я думаю, что это лучший способ узнать, существует ли пользователь. User :: where ('email', '=', 'value') -> count ()> 0;
Джанака Пушпакумара

1
@ Volatil3 Я только что проверил -> Существует () с Laravel 5.5, он говорит ложь, если он не существует.
Пежвак

26

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


5
не отвечая на вопрос, все же, очень полезные функции. Разница между ними заключается в том, что firstOrNew создает экземпляр вызываемой модели, в то время как firstOrCreate мгновенно сохраняет запрашиваемую модель, поэтому вам необходимо обновить изменения в модели firstOrCreate.
Gokigooooks

Да, или другой способ думать об этом, используйте firstOrCreate, если вы можете передать все атрибуты за один раз (используйте второй параметр), но firstOrNew, если вам потребуется дополнительная логика перед сохранением.
Уильям

22
if (User::where('email', Input::get('email'))->exists()) {
    // exists
}

1
Это должен быть принятый ответ. Самый эффективный и преданный способ сделать это - через exists()метод.
Робо Робок

12
if($user->isEmpty()){
    // has no records
}

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


2
Да, но это не возвращение коллекции. Он возвращает один объект модели, так как вы предполагаете, что у каждого пользователя есть уникальный, emailпоэтому ->isEmpty()выдает ошибку.
user3574492

А что если я получу следующую ошибку:Call to a member function isEmpty() on null
Pathros

6
if (User::where('email', 'user@email.com')->first())
    // It exists
else
    // It does not exist

Используйте first(), не count()если вам нужно только проверить на наличие.

first()это быстрее , потому что он проверяет наличие одного матча , тогда как count()подсчеты всех матчей.



4

Laravel 5.6.26v

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

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

затем

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

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


3

Это проверит, существует ли запрашиваемая электронная почта в пользовательской таблице:

if (User::where('email', $request->email)->exists()) {
   //email exists in user table
}

2

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

$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

Лучшее решение! Но мне нужно изменить имя таблицы и добавить имя столбца электронной почты:required|unique:users,email|email
marcelo2605

Отличное решение.
Joeri

1
if ($u = User::where('email', '=', $value)->first())
{
   // do something with $u
   return 'exists';
} else {
  return 'nope';
}

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

-> get () все равно вернет пустой массив



0

Это просто, чтобы узнать, есть ли какие-либо записи или нет

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


0

Вы можете использовать валидацию Laravel.

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

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

if($user > 0)
{
   echo "There is data";
}
else
   echo "No data";

0

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

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

0

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

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

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

    return $user;
}

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


Вы можете заменить findна where. User::where(id, 1)->first()
Эдгар Ортега

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

Я думаю, что нижеследующий способ - самый простой способ достижения того же самого

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

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

Самый простой способ сделать

    public function update(Request $request, $id)
{


    $coupon = Coupon::where('name','=',$request->name)->first(); 

    if($coupon->id != $id){
        $validatedData = $request->validate([
            'discount' => 'required',   
            'name' => 'required|unique:coupons|max:255',      
        ]);
    }


    $requestData = $request->all();
    $coupon = Coupon::findOrFail($id);
    $coupon->update($requestData);
    return redirect('admin/coupons')->with('flash_message', 'Coupon updated!');
}

0

Laravel 6 или сверху: напишите имя таблицы, затем укажите условие условия where, например, где ('id', $ request-> id)

 public function store(Request $request)
    {

        $target = DB:: table('categories')
                ->where('title', $request->name)
                ->get()->first();
        if ($target === null) { // do what ever you need to do
            $cat = new Category();
            $cat->title = $request->input('name');
            $cat->parent_id = $request->input('parent_id');
            $cat->user_id=auth()->user()->id;
            $cat->save();
            return redirect(route('cats.app'))->with('success', 'App created successfully.');

        }else{ // match found 
            return redirect(route('cats.app'))->with('error', 'App already exists.');
        }

    }

0

Эффективный способ проверить, существует ли запись, вы должны использовать метод is_null для проверки по запросу.

Код ниже может быть полезным:

$user = User::where('email', '=', Input::get('email'));
if(is_null($user)){
 //user does not exist...
}else{
 //user exists...
}

-1

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

// 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();


-12

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

    $ data = $ request-> all ();
    $ user = DB :: table ('User') -> pluck ('email') -> toArray ();
    если (in_array ($ USER, $ данных [ 'электронная почта']))
    {
    echo 'существующая электронная почта';
    }


8
Если у вас есть таблица User с ... скажем, более 1 000 000 000 записей, вы будете проверять очень долгое время
TrueStory,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.