Laravel update model with unique validation rule for attribute

后端 未结 18 2174
春和景丽
春和景丽 2020-11-27 12:45

I have a laravel User model which has a unique validation rule on username and email. In my Repository, when I update the model, I rev

18条回答
  •  春和景丽
    2020-11-27 13:10

    I am calling different validation classes for Store and Update. In my case I don't want to update every fields, so I have baseRules for common fields for Create and Edit. Add extra validation classes for each. I hope my example is helpful. I am using Laravel 4.

    Model:

    public static $baseRules = array(
        'first_name' => 'required',
        'last_name'  => 'required',
        'description' => 'required',
        'description2' => 'required',
        'phone'  => 'required | numeric',
        'video_link'  => 'required | url',
        'video_title'  => 'required | max:87',
        'video_description'  => 'required',
        'sex' => 'in:M,F,B',
        'title'  => 'required'
    );
    
    public static function validate($data)
    {
        $createRule = static::$baseRules;
        $createRule['email'] = 'required | email | unique:musicians';
        $createRule['band'] = 'required | unique:musicians';
        $createRule['style'] = 'required';
        $createRule['instrument'] = 'required';
        $createRule['myFile'] = 'required | image';
    
        return Validator::make($data, $createRule);
    }
    
    public static function validateUpdate($data, $id)
    {
        $updateRule = static::$baseRules;
        $updateRule['email'] = 'required | email | unique:musicians,email,' . $id;
        $updateRule['band'] = 'required | unique:musicians,band,' . $id;
        return Validator::make($data, $updateRule);
    }
    

    Controller: Store method:

    public function store()
    {
        $myInput = Input::all();
        $validation = Musician::validate($myInput);
        if($validation->fails())
        {
            $key = "errorMusician";
            return Redirect::to('musician/create')
            ->withErrors($validation, 'musicain')
            ->withInput();
        }
    }
    

    Update method:

    public function update($id) 
    {
        $myInput = Input::all();
        $validation = Musician::validateUpdate($myInput, $id);
        if($validation->fails())
        {
            $key = "error";
            $message = $validation->messages();
            return Redirect::to('musician/' . $id)
            ->withErrors($validation, 'musicain')
            ->withInput();
        }
    }
    

提交回复
热议问题