Laravel检查是否存在记录

Ben*_*Ben 218 php conditional laravel eloquent laravel-5

我是Laravel的新手.请原谅新手问题,但如何查找记录是否存在?

$user = User::where('email', '=', Input::get('email'));
Run Code Online (Sandbox Code Playgroud)

我该怎么办才能看到是否$user有记录?

luk*_*ter 493

这取决于您是否希望之后与用户合作或仅检查是否存在.

如果要使用用户对象(如果存在):

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

如果你只想检查

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

甚至更好

if (User::where('email', '=', Input::get('email'))->exists()) {
   // user found
}
Run Code Online (Sandbox Code Playgroud)

  • @ Volatil3你做错了什么.在运行查询后,您无法调用exists (28认同)
  • 如果你对一个不存在的记录调用`exists()`那么它会给出错误:`在null上调用一个成员函数exists() (14认同)
  • @lukasgeiter猜你是对的.我已经调用了`first()` (6认同)
  • @Volatil3 我刚刚用 laravel 5.5 测试了 ->exists(),如果它不存在,它会说 false。 (4认同)
  • 我认为这是查找 User 是否存在的更好方法。User::where('email', '=', 'value')->count() > 0; (2认同)

tap*_*osh 23

最好的解决方案之一是使用firstOrNewfirstOrCreate方法.该文件对双方更多的细节.

  • 虽然不适合问题,但仍然是非常有用的功能.两者之间的区别在于firstOrNew**实例化了一个被调用的模型实例,而firstOrCreate立即保存了查询的模型,因此您需要更新firstOrCreate'd模型的更改. (5认同)

luc*_*gic 13

if (User::where('email', Input::get('email'))->exists()) {
    // exists
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。最有效、最专用的方法是通过“exists()”方法。 (7认同)

小智 11

虽然有点晚了,但它可能会帮助那些尝试使用User::find()->exists()记录存在的人,因为 Laravel 显示了不同的行为find()where()方法。将电子邮件视为您的主键,让我们检查一下情况。

$result = User::find($email)->exists();
Run Code Online (Sandbox Code Playgroud)

如果包含该电子邮件的用户记录存在,则它将返回true。然而,令人困惑的是,如果不存在具有该电子邮件的用户,那么它将引发错误。IE

Call to a member function exists() on null.
Run Code Online (Sandbox Code Playgroud)

但情况有所不同where()

$result = User::where("email", $email)->exists();
Run Code Online (Sandbox Code Playgroud)

上面的子句将给出true记录是否存在以及false记录是否不存在。所以总是尝试使用where()记录存在而不是find()避免NULL错误。


小智 10

if($user->isEmpty()){
    // has no records
}
Run Code Online (Sandbox Code Playgroud)

Eloquent使用集合.请参阅以下链接:https://laravel.com/docs/5.4/eloquent-collections

  • 是的,但没有返回任何收藏。它返回一个模型对象,因为您假设每个用户都有一个唯一的`email`,因此`-> isEmpty()`将引发错误。 (2认同)

小智 10

在 laravel eloquent 中,有默认的 exists() 方法,参考后面的例子。

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


Nad*_*smi 7

Laravel 5.6.26v

通过主键( email 或 id )查找现有记录

    $user = DB::table('users')->where('email',$email)->first();
Run Code Online (Sandbox Code Playgroud)

然后

      if(!$user){
             //user is not found 
      }
      if($user){
             // user found 
      }
Run Code Online (Sandbox Code Playgroud)

包括“使用 DB”和表名 user 使用上述查询变成复数,如 user to users


小智 6

这将检查用户表中是否存在请求的电子邮件:

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


don*_*ona 5

if (User::where('email', 'user@email.com')->first())
    // It exists
else
    // It does not exist
Run Code Online (Sandbox Code Playgroud)

使用first()count()如果仅需要检查是否存在,则不使用。

first()更快,因为它会检查一个匹配而count()计数的所有比赛。