問題
- ユーザー情報の編集や更新をするフォームを作ってバリデーションを設けた
- ユーザー名メールアドレスに
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
の対象にすることができた。