【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を指定してあげます。

この記事はあなたの役に立ちましたか?