実現したいこと
氏名・電話番号など入力項目が複数ある、入力フォームでデータベースの必須カラムの論理値によって、バリデーションルールを変更したい。
テーブル構成
テーブルは以下のようになっており、カテゴリーテーブルの必須か否かでバリデーションチェックを行い、問題なければ、ユーザーテーブルへデータを保存します。
カテゴリーテーブル(categories)
ID | name | required |
---|---|---|
1 | 氏名 | true |
2 | 性別 | true |
3 | 住所 | true |
4 | 電話番号 | false |
5 | メールアドレス | false |
ユーザーテーブル(users)
ID | name | gender | address | tel | |
---|---|---|---|---|---|
結論
バリデーションチェックは、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()) {
// バリデーションエラーの場合の処理
}
}