366

我是 Laravel 的新手。如何查找记录是否存在?

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

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

4

30 回答 30

763

这取决于您是想事后与用户合作还是只检查是否存在。

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

$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
}
于 2014-11-23T22:31:24.280 回答
58
if (User::where('email', Input::get('email'))->exists()) {
    // exists
}
于 2017-12-21T12:44:14.677 回答
31

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

if (User::where('id', $user_id )->exists()) {
    // your code...
}
于 2019-08-11T06:23:31.223 回答
30

最好的解决方案之一是使用firstOrNeworfirstOrCreate方法。该文档对两者都有更多详细信息。

于 2016-02-22T18:35:48.943 回答
16
if($user->isEmpty()){
    // has no records
}

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

于 2017-07-25T03:17:26.053 回答
8

Laravel 5.6.26v

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

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

然后

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

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

于 2018-07-11T07:07:52.410 回答
8
if (User::where('email', 'user@email.com')->first()) {
    // It exists
} else {
    // It does not exist
}

如果您只需要检查是否存在,请使用first(),而不是。count()

first()更快,因为它检查单个匹配项,而count()计算所有匹配项。

于 2019-02-15T05:39:09.083 回答
6

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

if (User::where('email', $request->email)->exists()) {
   //email exists in user table
}
于 2019-03-25T09:50:19.200 回答
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
于 2017-05-11T07:29:31.270 回答
2

我使用 empty() 函数解决了这个问题:

$user = User::where('email', Input::get('email'))->get()->first();
//for example:
if (!empty($user))
    User::destroy($user->id);
于 2021-03-11T07:39:54.977 回答
1

检查nullwithinif语句可以防止 Laravel 在查询结束后立即返回 404。

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

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

    return $user;
}

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

于 2018-07-09T04:04:47.793 回答
1
if ($u = User::where('email', '=', $value)->first())
{
   // do something with $u
   return 'exists';
} else {
  return 'nope';
}

可以与 try/catch 一起使用

->get() 仍然会返回一个空数组

于 2019-01-23T09:54:44.060 回答
1
$email = User::find($request->email);
If($email->count()>0)
<h1>Email exist, please make new email address</h1>
endif
于 2019-08-07T04:20:39.493 回答
1

使用Validator简单、舒适且易于理解

class CustomerController extends Controller
{
    public function register(Request $request)
    {

        $validator = Validator::make($request->all(), [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:customers',
            'phone' => 'required|string|max:255|unique:customers',
            'password' => 'required|string|min:6|confirmed',
        ]);

        if ($validator->fails()) {
            return response(['errors' => $validator->errors()->all()], 422);
        }
于 2020-06-28T10:30:46.913 回答
1

您已经看到了很多解决方案,但是神奇的检查语法可能是这样的,

$model = App\Flight::findOrFail(1);

$model = App\Flight::where('legs', '>', 100)->firstOrFail();

当未找到任何相关模型时,它会自动引发异常并响应 404 有时您可能希望在未找到模型时抛出异常。这在路由或控制器中特别有用。fingernail 和 firstOrFail 方法将检索查询的第一个结果;但是,如果没有找到结果,Illuminate\Database\Eloquent\ModelNotFoundException则会抛出 an。

参考:https ://laravel.com/docs/5.8/eloquent#retrieving-single-models

于 2021-10-12T10:27:43.603 回答
0
$user = User::where('email', request('email')->first();
return (count($user) > 0 ? 'Email Exist' : 'Email Not Exist');
于 2017-07-04T12:14:19.403 回答
0

如果要插入唯一记录,可以使用 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());
于 2017-10-31T13:08:24.537 回答
0

这将检查表中是否存在特定的电子邮件地址:

if (isset(User::where('email', Input::get('email'))->value('email')))
{
    // Input::get('email') exist in the table 
}
于 2017-12-31T20:27:14.340 回答
0

最短的工作选项:

// 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();
于 2018-09-30T01:58:17.293 回答
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 而不分配临时变量。

于 2018-10-16T19:35:04.323 回答
0

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

    $user = User::where('email', '=', $request->input('email'))->first();
    if ($user) {
       // user doesn't exist!
    }
于 2019-01-23T12:17:50.403 回答
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);

主页 它有帮助!

于 2019-01-23T19:19:30.797 回答
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!');
}
于 2019-12-31T06:58:01.570 回答
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.');
        }

    }
于 2020-02-01T13:50:58.240 回答
0

如果您想在数据库中插入一条记录,但不存在具有相同电子邮件的记录,则可以执行以下操作:

$user = User::updateOrCreate(
    ['email' => Input::get('email')],
    ['first_name' => 'Test', 'last_name' => 'Test']
);

updateOrCreate方法的第一个参数列出了在关联表中唯一标识记录的列,而第二个参数包含要插入或更新的值。

你可以在这里查看文档:Laravel upserts doc

于 2021-05-19T08:41:07.713 回答
0
$userCnt     = User::where("id",1)->count();
if( $userCnt ==0 ){
     //////////record not exists 
}else{
      //////////record exists 
}

注意::根据您的要求条件。

于 2021-10-06T11:03:55.120 回答
-1

这是我认为可以提供帮助的链接 https://laraveldaily.com/dont-check-record-exists-methods-orcreate-ornew/

于 2019-07-04T14:38:24.403 回答
-1

检查记录是否存在的有效方法必须使用 is_null 方法来检查查询。

下面的代码可能会有所帮助:

$user = User::where('email', '=', Input::get('email'));
if(is_null($user)){
 //user does not exist...
}else{
 //user exists...
}
于 2020-02-09T22:09:32.987 回答
-4

很容易知道有没有记录

$user = User::where('email', '=', Input::get('email'))->get();
if(count($user) > 0)
{
echo "There is data";
}
else
echo "No data";
于 2017-03-14T10:47:19.550 回答
-14

这是检查电子邮件是否存在于数据库中的简单代码

    $data = $request->all();
    $user = DB::table('User')->pluck('email')->toArray();
    if(in_array($user,$data['email']))
    {
    echo '现有电子邮件';
    }

于 2017-03-29T11:17:54.753 回答