【问题标题】:Laravel php: unique update validation while editing how to ignore it in updating methodLaravel php:编辑时独特的更新验证如何在更新方法中忽略它
【发布时间】:2021-05-10 01:38:38
【问题描述】:

我想在更新表单时忽略“唯一验证”,只在创建时需要它

这是请求文件夹中的规则,我在更新“移动”字段和“电子邮件”字段时传递了“id”以忽略它

  public function rules()
    {
        return [
            'logo' => 'required_without:id|mimes:jpg,jpeg,png',
            'name' => 'required|string|max:100',
            'category_id'=>'required|exists:main_categories,id',
            'mobile' =>'required|max:100|unique:vendors,mobile,'.$this -> id,
            'email'  => 'required|email|unique:vendors,email,'.$this -> id,
            'password'=>'required_without:id',
            'address'=>'required|string|max:300',

        ];
    }

但是没有任何效果 unique validat

这个控制器更新方法

     public function update($id, VendorsRequest $request){
       // return $request;
        //validation
        //update

       try{
           $vendor= vendors::Selection()->find($id);
           if(!$vendor)
               return redirect()->route('admin.vendors')->with(['error' => 'المتجر دا مش موجود ممكن تجرب مرة تانية']);
           DB::beginTransaction();
           if($request->has('logo')) {
               $filepath = uploadImage('vendors', $request->logo);
               vendors::where('id', $id)
               ->update([
                   'logo' => $filepath,

               ]);
           }
           $data= $request-> except('_token','id','logo','password');
           if($request->has('password')){
               $data['password'] = $request->password;
           }
           vendors::where('id',$id)
           -> update($data);

            DB::commit();
            return redirect()->route('admin.vendors')->with(['success' => 'تم التحديث بنجاح']);


       }catch (\Exception $ex){
            DB::rollBack();

            return $ex;
        }

这是路线

Route::prefix('vendors')
    ->group(function(){
        Route::get('/', [VendorsController::class, 'index'])->name('admin.vendors');
        Route::get('create', [VendorsController::class, 'create'])->name('admin.vendors.create');
        Route::post('store', [VendorsController::class, 'store'])->name('admin.vendors.store');
        Route::get('edit/{id}', [VendorsController::class, 'edit'])->name('admin.vendors.edit');
        Route::post('update/{id}', [VendorsController::class, 'update'])->name('admin.vendors.update');
        Route::get('delete/{id}', [VendorsController::class, 'destroy'])->name('admin.vendors.delete');

表格字段的选择

 public function ScopeSelection($query){
    return $query -> select('id','name','logo','mobile','address','email','password','category_id','active','created_at','updated_at');
}

我需要帮助

【问题讨论】:

    标签: php laravel forms validation backend


    【解决方案1】:

    问题是您正在使用 VendorsRequest 请求处理程序进行创建和更新。

    解决这个问题的最简单方法是编写一个 VendorsUpdateRequest 处理程序,并且不包含唯一选项。

    另一种选择是将验证移动到您的控制器中,检查您正在使用哪种方法创建或更新并返回该选项所需的规则。

    【讨论】:

    • 非常感谢我创建了 VendorsUpdateRequest ,但是有没有办法为创建和更新方法制定请求规则,除了更新时的唯一验证
    • @Diab_Diab 最好的方法是将验证作为 rules() 方法引入控制器。然后将标志传递给该方法以控制规则数组中的项目。
    猜你喜欢
    • 1970-01-01
    • 2020-09-13
    • 2017-10-05
    • 2018-03-20
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 2014-07-25
    相关资源
    最近更新 更多