我刚来拉拉维尔。如何查找是否存在记录?

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

我能做什么来查看$user是否有记录?


当前回答

这有点晚了,但它可能会帮助那些试图使用User::find()->exists()来记录存在的人,因为Laravel为find()和where()方法显示了不同的行为。假设电子邮件是你的主键,让我们来看看这种情况。

$result = User::find($email)->exists();

如果存在该电子邮件的用户记录,则返回true。然而,令人困惑的是,如果不存在该电子邮件的用户,那么它将抛出一个错误。即

Call to a member function exists() on null.

但是where()的情况是不同的。

$result = User::where("email", $email)->exists();

如果记录存在,上面的子句将返回true,如果记录不存在则返回false。因此,总是尝试使用where()来表示记录是否存在,而不使用find()来避免NULL错误。

其他回答

在你的控制器中

$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

这是一个简单的代码来检查电子邮件是否存在数据库


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

在laravel雄辩中,有默认的exists()方法,参考下面的例子。

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

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

如果你想插入一个唯一的记录,你可以使用laravel验证:

$validated = $request->validate([
    'title' => 'required|unique:usersTable,emailAddress|max:255',
]);

但是你也可以用这些方法:

1:

if (User::where('email',  $request->email)->exists())
{
  // object exists
} else {
  // object not found
}

2:

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

if ($user)
{
  // object exists
} else {
  // object not found
}

3:

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

if ($user->isNotEmpty())
{
  // object exists
} else {
  // object not found
}

4:

$user = User::where('email',  $request->email)->firstOrCreate([
      'email' => 'email'
],$request->all());