Проверка формы Laravel 5.6 уникальна

У меня есть таблица с уникальным столбцом.
Мои правила проверки формы выглядят так:

    return Validator::make($data, [
'nameEN'   => 'required|string',
'nameHE'   => 'required|string',
'address'  => 'required|string|min:10|unique:clients'
]);

Моя проблема в том, что когда я редактирую строку, я получаю ошибку проверки, если я не изменил адресную колонку.

Моя функция редактирования выглядит так:

public function editPost(Request $request,$id){
$client = new Client();
$client->editValidation($request->all())->validate();
$row = $client->where('id',$id)->get()->first();
$update = array();
if(!empty($request->input("nameEN"))    && $request->input("nameEN")    != $row->nameEN) $update["nameEN"] = $request->input("nameEN");
if(!empty($request->input("nameHE"))    && $request->input("nameHE")    != $row->nameHE) $update["nameHE"] = $request->input("nameHE");
if(!empty($request->input("address"))   && $request->input("address")   != $row->address) $update["address"] = $request->input("address");

if(empty($update)) $message = $this->message("info", "Notic: Client {$row->nameEN} was not updated because nothing was changed.");
else if($client->where("id",$row->id)->update($update)){
$message = $this->message("success", "Client {$row->nameEN} was updated.");
} else {
$message = $this->message("danger", "Error: Client {$row->nameEN} was not updated.");
}
$redirect = redirect("clients");
if(isset($message)) $redirect->with("message",$message);
return $redirect;
}

Если я удалю unique Исходя из моих правил проверки, я рискую получить ошибку MySQL.

Как это можно уладить?

Заранее спасибо.

1

Решение

От документы:

Иногда вы можете игнорировать данный идентификатор во время уникальной проверки,
Чтобы поручить валидатору игнорировать идентификатор объекта

'address'  => 'required|string|min:10|unique:clients,address,'.$id

Или вы можете сделать это с помощью Rule учебный класс

use Illuminate\Validation\Rule;

Validator::make($data, [
'address' => [
Rule::unique('clients')->ignore($id),
]
]);

Если ваша таблица использует имя столбца первичного ключа, отличное от id, вы можете указать имя столбца при вызове метода ignore:

'address' => Rule::unique('clients')->ignore($id, 'primary_key')
4

Другие решения

Для проверки уникальности столбца в laravel 5.6:

просто для поля по запросу используйте как:

уникальная: таблица, столбец, за исключением того, idColumn

'address'  => 'required|string|min:10|unique:clients,address,'.$id

Когда вы хотите использовать отдельный класс для проверки. Я использую общий класс для добавления и обновления, как:

public function rules()
{
if($this->method() == 'POST')
$address = 'required|string|min:10|unique:clients,address';
else
$address  = 'required|string|min:10|unique:clients,address,'.$this->id;
//put a hidden input field named id with value on your edit view and catch it here;
return [
'nameEN'   => 'required|string',
'nameHE'   => 'required|string',
'address'  => $address
];
}
1

По вопросам рекламы [email protected]