以下の記事を見て、DBを使うのは色々と無駄が多いなと思ったので、設定ファイルを使う例を紹介します。設定ファイルはお好きにコピペで使いまわしちゃってください。
Laravel5で都道府県のプルダウンをデータベースから取得する(自分用メモ)
データの準備
Laravelではconfig下に好きなファイルを作成でき、定数的な使い方ができる。定義した値はconfig('ファイル名.キー名')
でアプリのどこからでも取得できる。配列の入れ子ももちろん可能。
pref.php
<?php
return array(
'1' => '北海道',
'2' => '青森県',
'3' => '岩手県',
'4' => '宮城県',
'5' => '秋田県',
'6' => '山形県',
'7' => '福島県',
'8' => '茨城県',
'9' => '栃木県',
'10' => '群馬県',
'11' => '埼玉県',
'12' => '千葉県',
'13' => '東京都',
'14' => '神奈川県',
'15' => '新潟県',
'16' => '富山県',
'17' => '石川県',
'18' => '福井県',
'19' => '山梨県',
'20' => '長野県',
'21' => '岐阜県',
'22' => '静岡県',
'23' => '愛知県',
'24' => '三重県',
'25' => '滋賀県',
'26' => '京都府',
'27' => '大阪府',
'28' => '兵庫県',
'29' => '奈良県',
'30' => '和歌山県',
'31' => '鳥取県',
'32' => '島根県',
'33' => '岡山県',
'34' => '広島県',
'35' => '山口県',
'36' => '徳島県',
'37' => '香川県',
'38' => '愛媛県',
'39' => '高知県',
'40' => '福岡県',
'41' => '佐賀県',
'42' => '長崎県',
'43' => '熊本県',
'44' => '大分県',
'45' => '宮崎県',
'46' => '鹿児島県',
'47' => '沖縄県'
);
?>
コントローラーで取得する
SampleController.php
public function sample() {
$prefs = config('pref');
return view('sample')->with(['prefs' => $prefs]);
}
ビューで表示する
sample.blade.php
<select>
@foreach($prefs as $index => $name)
<option value="{{ $index }}">$name</option>
@endforeach
</select>
ビューで直接取得+表示も可能
sample.blade.php
<select>
@foreach(config('pref') as $index => $name)
<option value="{{ $index }}">$name</option>
@endforeach
</select>
選択された値の保持
検索機能なんかでは選択されたメニューを保持しておきたいことがあると思います。
<select name="_pref">
@foreach(config('pref') as $index => $name)
<option value="{{ $index }}" @if(old('_pref') == $index) selected @endif>$name</option>
@endforeach
</select>
(おまけ)
普通は1~47の数字をpref_idみたいなカラムに保存して、表示する時はIDをもとに文字列を取得すると思う。Userモデルを例にその流れを書いてみる。
Userモデルに都道府県名を返すメソッドを用意する。
User.php
public function getPrefNameAttribute() {
return config('pref.'.$this->pref_id);
}
user.blade.php
<p>出身地:{{ $user->prefName }}</p>