Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

以下の記事を見て、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>
sakuraya
株式会社ITMONOで執行役員CTOをしています。 転職活動中です。 はてなブログ:https://bluepixel.hatenablog.com/ Twitter: https://twitter.com/itmono_sakuraya
https://note.mu/bluepixel
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした