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

[Cakephp]フォームにマスタテーブルから読み込んだリストを表示したい件

More than 3 years have passed since last update.

CakePHPで入力フォームを作るとき、
たとえば都道府県を入れさせるときに普通ならリストボックス作りたいわけで、
で、HTMLファイルにごりごりと

<option value="01">北海道</option>
<option value="02">青森県</option>
<option value="03">岩手県</option>

とか47都道府県書きたくないし、
そもそもDB上じゃ都道府県はマスタ作って
コードで管理してるんだわって時に、

いつもならフレームワーク使わずに
PHPで都道府県マスタテーブルお呼び出しして作ってたんですよ。

CakePHPならどうするんだろうなと思って調べたんだけど
調べ方が悪いのか全然ヒットしなかったのでメモ。

用意するもの

MySQL
- 都道府県テーブル(Prefs)
CakePHP
- ArticlesTable.php
- ArticlesController.php
- index.ctp

書き方

1.ArticlesTable.phpのpublic function initialize()に
 都道府県テーブルを関連付け(belongsTo)してやる。

CakePHP
public function initialize(array $config)
    {
       $this->belongsTo('Prefs', [
            'className' => 'Lists.Prefs',
            'foreignKey' => 'pref_id'
        ]);
    }

2.ArticlesController.phpで都道府県テーブルを取り出す変数をセット。

CakePHP
public function index() {
        $prefs=$this->Articles->Prefs->find();
        $this->set('prefs',$prefs);
    }

3.index.ctpにセレクトボックス生成用のフォームヘルパーを取り付け。

CakePHP
    echo $this->Form->create($article);
    echo $this->Form->label('都道府県','都道府県');
    $selectprefs = array();
    foreach ($prefs as $pref){
        $selectprefs +=array($pref->pref_id => $pref->pref_name);
    }
    echo $this->Form->select('都道府県',$selectprefs);
    echo $this->Form->end();

CakePHPは触り始めたばっかりなんで
まだ生のPHP触ってる方が楽だなーなどと思うこともたびたびありますが
たぶん慣れればこっちの方が楽なんだろうな。
できないことも多々ありそうだけど。

nora_kuragen
見積書ばかり書く生活から脱出して、4年ぶりぐらいにプログラム書いてる。苦労が発生したらここにメモしていこうなどと。
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