Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
107
Help us understand the problem. What is going on with this article?
@sakuraya

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>
107
Help us understand the problem. What is going on with this article?
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
sakuraya
I'm Solutions Architect

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
107
Help us understand the problem. What is going on with this article?