4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Laravel】条件によってバリデーションの内容を変更したい

Posted at

実現したいこと

氏名・電話番号など入力項目が複数ある、入力フォームでデータベースの必須カラムの論理値によって、バリデーションルールを変更したい。

テーブル構成

テーブルは以下のようになっており、カテゴリーテーブルの必須か否かでバリデーションチェックを行い、問題なければ、ユーザーテーブルへデータを保存します。

カテゴリーテーブル(categories)

ID name required
 1   氏名   true 
2 性別 true
3 住所 true
4 電話番号 false
5  メールアドレス  false

ユーザーテーブル(users)

 ID   name   gender   address   tel   email 
               

結論

バリデーションチェックは、Validatorで行いました。

Validatorについては以下のページを参考にさせていただきました。

例として、以下では電話番号の場合のコードを記載しています。

UserController.php
<?php
namespace App\Http\Controllers

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

public function updateMember(Request $request)
{
    $rules = [];
    
    // カテゴリーテーブルから、nameが電話番号のデータを取得
    $tel = DB::table('categories')
        ->where('categories.name', '電話番号')
        ->first();
    
    // データがあり、かつrequiredがtrue の場合のみ、 電話番号のバリデーションルールを追加
    if ($tel && $tel->required == true) {
        $rules['tel'] = 'required';
    }
    
    // バリデーションチェックを行う
    $validator = Validator::make($request->all(), $rules);
    
    if ($validator->fails()) {
        // バリデーションエラーの場合の処理
    }
}

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?