Laravel5.5 config プルダウンメニュー/ラジオボタン


Laravelの便利機能configでプルダウンメニューやラジオボタンつくってみました!
今回は血液型を血液方のテーブルを作成せずに、Usersテーブル内で血液型データを保管したい!
テーブルをいっぱい作るのはイヤだ!という方のために書きました!

configを使ってプルダウンメニューをつくろう!

作業の流れ

1.configにプルダウンメニューに入れたいリストを作成。
2.Usersテーブルに専用カラムを作成
3.コントローラーで呼び出し、viewにデータを渡す。
4.viewで表示し、セレクトボックスで表示。選択後はそのデータを再度コントローラーに渡す。
5.コントローラにて選択されたデータをうけとる。(その後、DBに保存など行う)
6.DBに入れた数字に伴ったデータを取得

1.configにプルダウンメニューに入れたいリストを作成。

作成する場所
Laravel->config->ここにファイル作成
プルダンメニューに表示させるものは下記のように配列でかきます!

blood.php
<?php
return array(
    '1' => 'A型',
    '2' => 'B型',
    '3' => 'AB型',
    '4' => 'O型'
);
?>

2.Usersテーブルに専用カラムを作成

まず、Userテーブルに血液型とついになっている数字が入るようなカラム作成をします。
カラム名には縛りがあります。
/config/blood.phpのファイル名からもじる必要があります。
ファイル名がblood.phpなら、カラム名はblood_id
また、この後にUserモデルに関数を書きますが、そこのメソッド名の命名法にも縛りがあります。
(6.にて説明)

3.コントローラーで呼び出し、viewにデータを渡す。

config('ファイル名')で、さっき作成したプルダウンメニューが呼び出されます!
※ファイル名とはconfigディレクトリ内に作成したファイルの名前。今回だとblood.phpなので、config('blood')となります!
その後は、いつも通りにコントローラーからビューへデータを飛ばします=33

コントローラー
public function add() {
        $blood_types = config('blood');
        return view('viewの指定', compact('blood_types'));
    }

4.viewで表示し、セレクトボックスで表示。選択後はそのデータを再度コントローラーに渡す。

view.blade.php
<select name="blood">
@foreach ($blood_types as $blood_type)
<option value="{{ $blood_type }}">{{ $blood_type }}</option>
@endforeach
</select>

5.コントローラにて選択されたデータをうけとる

送信されたデータはコントローラーの$requestから取ってこれるんで、以下のように血液型のデータを取ってこれる。

コントローラー
dd($request->blood);
//(例)1
//A型を表す数字。DBに入れるデータはこの数字

この方法では、A型をあらわす1をコントローラーで受け取れます!

6.DBに入れた数字に伴ったデータを取得

どういうことかといいますと。
取得したのはA型を表す1
DBに保存されるデータも1
では、そのDBに保存されている1からそうやってA型というデータを取得すればいいのでしょうか?
今回はそのお話。

関数はget[ほにゃらら]Attribute()で、[ほにゃらら]の部分になんの情報かわかるような単語を入れます。後にviewで使うので、何のデータかわかるような名前にした方が無難ですね。
今回はBloodTypeでいきます!

User.php

public function getBloodTypeAttribute() {
    return config('blood.'.$this->blood_id);
}

User.blade.php
血液型:{{ $user->bloodType }} //A型
血液型:{{ $user->blood_id }} //1

おまけ~configを使ってラジオボタンを実装!~

view.blade.php

@foreach ($blood_types as $blood_type)
<ul style="list-style: none;">
<li><input type="radio" name="blood" value="{{ $blood_type }}">{{ $blood_type }}</li>
</ul>
@endforeach

<ul style="list-style: none;"><li>によってリスト化した際に、冒頭のを消すコード。今回はラジオボタンなのであると邪魔なんで消しました。
また、コントロールでは$request->bloodでデータが取得できます!

以上になります!
これでconfigを使って、プルダウンメニューやラジオボタンを作成していただければ幸いです!
LGTM大好物なんで、ポチッと投げ銭感覚でおねがいします〜!