Validating a Unique Slug on Update in Laravel 5 Validating a Unique Slug on Update in Laravel 5 php php

Validating a Unique Slug on Update in Laravel 5


Try to modify your rule like following(in form request class):

public function rules(){    return [      'name'  => 'required,min:3',      'slug'  => 'required|alpha_dash|unique:categories,slug,'.$this->id')    ];}

It works for me.


In unique rule you may specify id you want to ignore.

You can create 2 separate request (one for create and one for update), but you can do it also this way checking if if is set(I assume your update url looks like /questions/2 ):

public function rules(){    $rules = [        'name' => 'required|min:3',        'slug' => ['required', 'alpha_dash']    ];    $rule = 'unique:questions';    $segments = $this->segments();    $id = intval(end($segments));    if ($id != 0) {           $rule .= ',slug,' . $id;    }    $rules['slug'][] = $rule;    return $rules;    }}


If you must have the ability to update a slug, projects I've worked on usually require it is not editable after creation, then you can use laravel's built in rule to ignore a certain record on the table by primary key.

$rules['slug'] = "required|unique:questions,slug,{$id}";

http://laravel.com/docs/5.0/validationsee "Forcing a unique rule to ignore a given ID"