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
}
lukasgeiter
источник
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
}
lucidlogic
источник
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()подсчеты всех матчей.

doncadavona
источник
5

В laravel eloquent есть метод default (), см. Следующий пример.

if(User::where('id', $user_id )->exists()){ // your code... }

Дханушка Удаянга
источник
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 () все равно вернет пустой массив

юлианский
источник
1
$email = User::find($request->email);
If($email->count()>0)
<h1>Email exist, please make new email address</h1>
endif
Мухаммед Усман
источник
0

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

$user = User::where('email', '=', Input::get('email'))->get();
if(count($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

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

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

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

if($user > 0)
{
   echo "There is data";
}
else
   echo "No data";
hamidteimouri
источник
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 в исходной инструкции.

Chawker21
источник
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);

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

rc.adhikari
источник
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();
wheelmaker
источник
-12

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

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

Рам Пратап Сингх
источник
8
Если у вас есть таблица User с ... скажем, более 1 000 000 000 записей, вы будете проверять очень долгое время
TrueStory,