https://teratail.com/questions/99712
カスタムValidationでの複合カラムの方法
Request派生クラス内でのバリデーションの書き方であれば、こんな感じでしょうか。 public function rules() { return [ 'id' => 'required', 'name' => 'required|unique:users,name,NULL,id,id,' . $this->input('id') ]; } ↑の方法から自分自身を除く方法をくわしく書いてあるサイト https://qiita.com/katsunory/items/02693caf0e8c71d609ee5.2までの記法なら1行でもかける 'unique:sample,second,' . $this->input('id'). ',id,first,' . $this->input('first'), unique:テーブル,カラム,除外ID,IDカラム,where制約カラム,where制約カラムの値 もちろんイコール以外も否イコールとかIS NULLとかも書き方次第でいける。 それらの記法はこちらの記事が参考になる。 [Laravel]バリデーションのuniqueにおける条件指定について - Qiitaとりあえずidは一旦uniqueチェックせず、nameの方で「idが$this->input('id')、かつその中でnameがunique」というチェックをすればよいかと思います。
uniqueの引数を前から順に解説するならこんな感じの意味です。引数 値
テーブル users
カラム name
除外対象 NULL
除外対象のwhere対象カラム id
絞込条件対象カラム id
絞込条件値指定フィールドの名称を設定する方法
https://liginc.co.jp/359544$this->validate($request, [ 'name' => 'required|alpha', 'level' => 'required|integer|between:1,99', ], [ 'level.required' => ':attributeは必須やねん', 'level.integer' => ':attributeは整数やねん', 'level.between' => ':attributeは:minから:maxまでやねん', ], [ 'level' => 'レべル', ]);自分自身を(自身のIDを取得して)除外する方法
http://www.webopixel.net/php/1377.html既存はこんな感じ
public function rules() { $user = $this->user(); return [ 'email' => [ 'required', 'email', 'confirmed', 'max:255', Rule::unique('users')->ignore($user->id), ], ]; } }【Laravel】複数カラムのユニーク制約のバリデーションを実装する方法<自分自身を除外する(ignore)の記載方法もあるよ>
https://qiita.com/katsunory/items/02693caf0e8c71d609eeuse Illuminate\Validation\Rule; /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { // firstカラムとsecondカラムのユニーク制約のバリデーション。どちらも必須とする return [ 'first' => 'required', 'second' => [ 'required', // Ruleクラスを使用した5.3からの記法。視覚的にわかりやすくなっている // sampleテーブルでユニーク制約。ignoreで入力されたidはバリデーションから除外する Rule::unique('sample')->ignore($this->input('id'))->where(function($query) { // 入力されたfirstの値と同じ値を持つレコードでのみ検証する $query->where('first', $this->input('first')); }), ], // 5.2までの記法。1行で書けるがあまり直感的ではない // 'second' => 'required|unique:sample,second,' . $this->input('id'). ',id,first,' . $this->input('first'), ]; }