拉拉维尔检查记录是否存在


Laravel Checking If a Record Exists

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

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

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

这取决于您是想在之后与用户一起工作还是只检查是否存在。

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

$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
}
if (User::where('email', Input::get('email'))->exists()) {
    // exists
}

在 laravel 雄辩中,具有默认的exists()方法,请参阅以下示例。

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

最好的解决方案之一是使用 firstOrNewfirstOrCreate 方法。该文档包含有关两者的更多详细信息。

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

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

拉维尔 5.6.26v

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

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

然后

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

包括"使用DB"和表名用户使用上述查询变为复数,如用户对用户

这有点晚了,但它可能会帮助那些试图使用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错误。

if (User::where('email', 'user@email.com')->first()) {
    // It exists
} else {
    // It does not exist
}

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

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

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

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

在控制器中

$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

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

$user = User::where('email', Input::get('email'))->get()->first();
//for example:
if (!empty($user))
    User::destroy($user->id);

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

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

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

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

将与尝试/捕获一起使用

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

$email = User::find($request->email);
If($email->count()>0)
<h1>Email exist, please make new email address</h1>
endif

简单,舒适和易于理解的验证器

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

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

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

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

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

$user = User::where('email', request('email'))->first();
return (count($user) > 0 ? 'Email Exist' : 'Email Not Exist');

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

if (isset(User::where('email', Input::get('email'))->value('email')))
{
    // Input::get('email') exist in the table 
}

最短的工作选项:

// 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();
$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 的全部内容。

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

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

创建下面的方法(为自己)以检查给定的记录 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);

家 它有帮助!

最简单的方法

    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!');
}

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.');
        }
    }
如果要

在不存在具有相同电子邮件的记录的情况下在数据库中插入记录,则可以执行以下操作:

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

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

您可以在此处查看文档: Laravel更新插入文档

如果要

插入唯一记录,可以使用 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
}

阿拉伯数字:

$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());
$userCnt     = User::where("id",1)->count();
if( $userCnt ==0 ){
     //////////record not exists 
}else{
      //////////record exists 
}

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

  1. 只需使用这个来获得真或假

    $user = User::where('email', '

    =', input::get('email'))->exists();

  2. 如果你想$user结果,你可以使用这个,

    $user = User::where('email', '=', input::get('

    email'))->get();

并像这样检查结果,

if(count($user)>0){}
  1. 其他明智的你可以像这样使用,

    $user = User::where('email', '

    =', input::get('email'));

    if($user->exists()){$user = $user->get();}

您可以尝试将布尔结果设置为真或假

$columns = [
    'email' => "email@example.com",
];
$exists = User::exists($columns);
if($exists)
     ...some code

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

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

$user = User::where('email', '=', Input::get('email'));
if(is_null($user)){
 //user does not exist...
}else{
 //user exists...
}