問題
- ユーザー情報の編集や更新をするフォームを作ってバリデーションを設けた
- ユーザー名メールアドレスに
uniqueを適用した -
uniqueの対象以外の情報を変更したいのに、uniqueに引っかかってしまって、その先に進めない
例
uniqueが適用されている職種名のエラーが出てきてしまう。

コード
現在のコード、バリデーションはこのような状態
Works/EditCheckController.php
$validator = Validator::make($request->all(), [
'edit_name' => 'required|max:20|unique:works,works_name',
'edit_flag' => 'boolean',
],
[
'edit_name.required' => '職種名を入力してください。',
'edit_name.max' => '職種名は20字以内で入力してください。',
'edit_name.unique' => 'この職種名は既に登録されています。',
'edit_flag.boolean' => '0か1を入力してください。',
]);
解決策
uniqueの引数を増やす
Works/EditCheckController.php
$validator = Validator::make($request->all(), [
'edit_name' => 'required|max:20|unique:works,works_name,'.$request -> edit_id.',works_id',
'edit_flag' => 'boolean',
],
[
'edit_name.required' => '職種名を入力してください。',
'edit_name.max' => '職種名は20字以内で入力してください。',
'edit_name.unique' => 'この職種名は既に登録されています。',
'edit_flag.boolean' => '0か1を入力してください。',
]);
uniqueの内容は、
unique: uniqueチェックをしたいテーブル名, uniqueチェックをしたいカラム名,.uniqueチェックの対象外にしたいデータがあるレコードの主キー.',uniqueチェックの対象外にしたいデータがあるレコードの主キーのカラム名'
となっている。
処理の内容としては、
-
uniqueチェックをした時の主キーと対象外にしたいデータがあるレコードの主キーが一致すれば、uniqueの結果を返さない -
uniqueチェックをした時の主キーと対象外にしたいデータがあるレコードの主キーが一致しなければ、uniqueの結果を返す
(であってるはず)
確認
uniqueの対象となっているWORKS_NAMEを変更せずに他のデータを編集できるようになり、

既に登録されているデータはuniqueの対象にすることができた。

