ACCESSならルックアップテーブル指定すれば良いけれど。
PHPプログラムやJSP/Servlertプログラムで、同じ事をしたい。レコードの入力値をプルダウンで選びたい。たったそれだけのために。オレは時間を掛けてしまってた。なんて無駄をしてたんだ。
SELECTボックスの定義はドコに書く?
SELECT タグの自動生成が面倒。SELECTのOPTION項目が10を超えることは珍しいので、HTMLを手書きしている。手書きしちゃうと、OptionのVALUE管理が面倒だし。かといって、10レコード程度でテーブル定義するとアプリ作成が手間だし。INIファイルに書くと更新が手間だし。テンプレートに手書きするとソースからみれないし。
SELECT作成はDBにテーブル作成するのが一番だけど、手間だよなぁ。。。
それ、symfonyなら簡単だよ。
symfony generator なら簡単だった。schema.ymlにYAMLでリレーションシップ定義して、proprl-build-modelすればいい。
shcmema.ymlの書き方は、symfonyで簡単リレーションシップに書いた。
リレーションシップしたけれど。
Optionの名前はIDだった。
リレーションシップで作ったフィールドは自動的にSELECTで便利。でもID丸見えだぁ〜〜。数字じゃSELECTの意味無いんじゃん。
マニュアル読んで解決法を探ってきた
原因が、自動生成オブジェクトにtoString()メソッドがないから。だそうだ。
toStirng()メソッドを定義したら解決した。
これで、SELECT タグのOptionがわかりやすくなる。toString()でSELECT内容を制御するこの仕様が、個人的にお気に入りだ。
設定例
types テーブルからSELECTのオプションを選ぶときにtoString()を足してやる。
/** * Subclass for representing a row from the 'types' table. * * * * @package lib.model */ class Types extends BaseTypes { public function __toString(){ return $this->getName()."のデータ"; //types テーブルにname フィールドがある。 //$this->getNameは自動生成(たぶんリフレクション)されている } }
SELECTボックス作るのは手間。propel-build-model と toString()でSELECTタグ自動生成は嬉しい。