LoginSignup
119
122

More than 5 years have passed since last update.

Laravelで都道府県のプルダウンメニューを作ってみる

Last updated at Posted at 2016-11-04

以下の記事を見て、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>
119
122
4

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
119
122