【Laravel 8】2つのカラムでユニーク制約をする(Validate)
Laravel8のバリデーションで、2つのカラムをユニークで制約する方法です。
例えば、
link1カラム、link2カラムがあったととします。
link1だけユニーク、link2だけがユニークではなく、link1とlink2の値がセットでユニークであって欲しい場合があります。
環境
Laravel 8
実際のコード
早速、実際のコードです。詳細は次に記載します。
$this->validates['link2'] = [
'nullable',
'regex:/^[a-z0-9_]+$/',
'between:1,50',
Rule::unique('テーブル名')
->where('link1', 値)
->where('link2', 値)
->ignore(自分のID, 'IDカラム名')
];
いつも通り、バリデーションのルールを入れます「nullable」や「between」などなど。これは不要であればなしでもOKです。
Ruleクラスを使ってルールを追加する
次に「Rule」クラスを使ってルールを新しく追加します。
unique()にユニークにしたいテーブル名を入れ、where()で2つのカラムを指定します。
「値」にはフォームで受け取った値を入れます。
最後に自分自身は省きたいのでiqnore()で自分のIDを指定してあげます。