Laravel检查记录是否存在


257

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

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

我在这里可以查看是否$user有记录?


2
首先,您需要在$ user查询上执行findOrFail()或类似操作
Mark Ba​​ker

9
这并没有真正的帮助
2014年

1
那怎么办呢?为什么没有帮助?$user = User::where('email', '=', Input::get('email'));只需在中创建查询$user,则需要执行该查询。findOrFail()是执行该查询的一种方法。get()将是另一种方式,firstOrFail()
马克·贝克

2
如果某个建议“并没有真正帮助”,请尝试说出它为什么并没有真正帮助,因为那样一来,这意味着我们知道如何改进/更改该建议
Mark Ba​​ker

考虑一下此i.imgur.com/ulqyOiw.png无需重新发明轮子
nikoss

Answers:


565

这取决于您之后是否要与用户一起使用,还是仅检查是否存在。

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

$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您做错了什么。您已经运行查询后就不能调用存在
lukasgeiter

7
@lukasgeiter猜你是对的。我已经打电话给first()
Volatil3

1
我认为这是查找User是否存在的更好方法。User :: where('email','=','value')-> count()> 0;
Janaka Pushpakumara

1
我刚刚使用laravel 5.5测试了@ Volatil3-> exists(),如果它不存在则显示为false。
Pezhvak

26

最好的解决方案之一是使用firstOrNewor firstOrCreate方法。该文档同时提供了更多详细信息。


5
虽然不适合这个问题,但仍然非常有用的功能。两者之间的区别在于,firstOrNew 实例化了一个称为Model 的实例,而firstOrCreate立即保存了查询的模型,因此您需要更新firstOrCreate'd模型上的更改。
Gokigooooks '16

是的,它的思维或另一种方式是,使用firstOrCreate如果你能一次性通过所有的属性(使用第二个参数),但firstOrNew如果你要在保存之前需要进一步的逻辑。
威廉·特雷尔

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

1
这应该是公认的答案。最有效和专用的方法是通过该exists()方法。
Robo Robok

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

雄辩的用途收藏。请参阅以下链接: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

通过主键(电子邮件或ID)查找现有记录

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

然后

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

包括“使用DB”和表名用户使用上面的查询成为用户复数


3

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

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

1

在您的控制器中

$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 '19

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

可以尝试/抓住

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

如果找到用户,它似乎会运行双重查询,但是我似乎找不到任何其他可靠的解决方案。


您可以替换findwhereUser::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
}

如果这是您在原始语句中使用$ user的全部,它将返回true或false而不分配临时变量。


0

我认为以下方法是实现相同目标的最简单方法:

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

0

创建以下方法(针对我自己)以检查给定的记录ID在Db表上是否存在。

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子句条件,例如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();
    if(in_array($ user,$ data ['email']))
    {
    回显“现有电子邮件”;
    }


8
如果您有一个表用户,其中有...说超过1,000,000,000条记录,那么您将长时间检查veeeeeeery
TrueStory
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.