Laravelでマスタデータ(key-valueデータ)をどう管理するか
2019年03月15日
Laravelで、フォームを作る時に、例えば選択ボックスがあって、そこから値を取り出したい場合があります。
例えば、性別[男、女]とか、都道府県[北海道〜沖縄]とか、カテゴリ[〜、〜]とか色々と考えられます。
それらのデータは、しょっちゅう変更があるもので、複雑なものであればデータベースにテーブルを作ってそこから引っ張ってくる方法もあるのですが、例えば男、女のような小さいデータセットであれば、わざわざそれをするほどでもないというか、いちいちテーブルを追加してデータをセットするというのが、Laravelの場合マイグレーションを通さないといけなかったりと色々と面倒です。
その場合に便利なやり方ですが、configに追加するのが楽です。
以下のページにやり方が書いてありました。
一応手順についてメモしておきます
1.config以下に好きなファイル名で作成
都道府県であれば、per.phpのようなファイル名をconfig以下に作成して保存します。
return array( '1' => '北海道', '2' => '青森県', 省略 '46' => '鹿児島県', '47' => '沖縄県' );
ちなみに、configのキャッシュが残っていると反映されないので、ファイルアップ後は以下のコマンドが実行必要です。
php artisan config:cache
上記の例では、pref.phpには一つしか配列が定義されていないですが、
複数定義したい場合は以下のように多次元配列でも設定が可能です。
return [ "sex" => [ "1" => "男", "2" => "女", ] ];
上記のように設定しても、後で問題なくアクセスできます。
コントローラーで取得→テンプレートに表示、または直接bladeに表示
作成したファイルは、config(ファイル名)で、いつでも参照して取得可能です。
コントローラーで取得してからテンプレートに表示する方法
public function sample() { $prefs = config('pref'); return view('sample')->with(['prefs' => $prefs]); }
直接テンプレートに記述する
以下のように直接取得することも可能です。
<select name="_pref"> @foreach(config('pref') as $index => $name) <option value="{{ $index }}" @if(old('_pref') == $index) selected @endif>$name</option> @endforeach </select>
多次元配列の場合は以下のようなかんじです。
例えば、config/common.phpに
return [ "sex" => [ "1" => "男", "2" => "女", ] ];
上記のような定義を例えばcommon.phpにした場合、以下のように記述できます。
<select name="sex"> @foreach(config('common.sex') as $index => $value) <option value='{{ $index }}' @if(old('sex') == $index) selected @endif >{{ $value }}</option> @endforeach </select>