如何在 laravel 中更新时验证电子邮件

Posted

技术标签:

【中文标题】如何在 laravel 中更新时验证电子邮件【英文标题】:How to validate email while updating in laravel 【发布时间】:2022-01-11 19:31:54 【问题描述】:

我有 2 个名为 area_managersshopkeepers 的表。我想从area_managersvalidate email,同时以一种与shopkeepersarea_managers 表的电子邮件不匹配的方式进行更新。我尝试了以下方式,但它甚至不允许相应用户的现有电子邮件。

   public function update(Request $request, AreaManager $areaManager)
    
        $request->validate([   
     'email'=>'required|email|unique:shopkeepers,email|unique:area_managers,email,'.$areaManager->id,
        ]);
        $areaManager-> email = $request->email;
        $areaManager->update();
        return redirect()->route('area_manager.edit',$areaManager->id);
    

【问题讨论】:

Welcome to SO ...您必须从唯一规则中忽略当前用户的记录,文档解释了如何为该规则执行此操作 所以你需要在更新时验证唯一性吗? ManojKiran,是的。更新时验证 2 个表的唯一性。 这看起来应该可以工作。 $areaManager 是什么?包括所有相关代码,并显示此代码的位置。我假设的控制器方法? 【参考方案1】:

你应该使用这个命令创建一个角色:

php artisan make:rule 角色名

然后在 pass 方法中设置您的查询,然后在验证器中使用

【讨论】:

【参考方案2】:

快速检查可能是这样的:

$checkAreaManagers = DB::table('area_managers')->where('email', '=', $request->email)->first();
$checkShopkeepers = DB::table('shopkeepers')->where('email', '=', $request->email)->first();

if ($checkAreaManagers === null || $checkShopkeepers === null) 
  
   // Proceed with the update
   
    $areaManager->email = $request->email;
    $areaManager->save();


if ($checkAreaManagers !== null || $checkShopkeepers !== null) 
  
   // Cancel the update (Your logic here)
   
   dd('Duplicate found');



【讨论】:

以上是关于如何在 laravel 中更新时验证电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

电子邮件地址字段的值已被使用。 laravel 请求验证

Laravel 5 更新验证电子邮件需要是唯一的

如何在 laravel 验证中验证多个电子邮件?

如何在 Laravel 中验证电子邮件地址是不是是有效的 PayPal 电子邮件地址

如何在 Laravel 中手动重新发送电子邮件验证?

如何使用 Laravel 5.5 身份验证使电子邮件登录不区分大小写