0

テーブル列の値を表示するドロップダウン リストをページに追加したいのですが、Yii フレームワークを使用してこれを行うにはどうすればよいですか?

列id、program_name、is_activeを持つテーブル(テーブル名はプログラム)があります

新しいコントローラーとそれに関連付けられたビューを作成しました。そのビューに、program_name から値が入力されたドロップダウン リストを表示する必要があります。

4

2 に答える 2

2

私はこれをモデルレベルで解決します。例えば

マシンモデルでは、ゲッターを定義します。

 public function getCompleteMachineName ()
 {
  return $this->merk->name.' '.$this->name;
 }

そして、あなたのlistDataで:

  Chtml::listData(Machine::model()->with('merk')->findAll(...), 
  'machine_id', 'completeMachineName')
于 2013-01-17T08:44:07.717 に答える
1

あなたがする必要があるのはCHtml::dropDownList、おそらくタグの配列をCHtml::listData作成するプロセスを容易にするために、を使用することです。value=>display<options>

例(コードのコメントを参照):

echo CHtml::dropDownList(
     'somename',// for "name" attribute of <select> html tag,
                // this also becomes the "id" attribute, incase you don't specify
                // it explicitly in the htmlOptions array
     '', // the option element that is to be selected by default
     CHtml::listData( // listData helps in generating the data for <option> tags
        Program::model()->findAll(), // a list of model objects. This parameter
              // can also be an array of associative arrays
              // (e.g. results of CDbCommand::queryAll).
        'id', // the "value" attribute of the <option> tags, 
              // here will be populated with id column values from program table 
        'program_name' // the display text of the <option> tag,
              // here will be populated with program_name column values from table
     ),
     array('id'=>'someid'), // the htmlOptions array, whose values will be
              // generated as html attributes of <select> and <option> tags
);

編集プログラムテーブルのCActiveRecordモデルがない場合は、直接SQLを使用して、上記のサンプルで次のように置き換えることができます。Program::model()->findAll()

Yii::app()->db->createCommand()->select('id, program_name')->from('program')->queryAll()

また、program_name列の値をタグのvalue属性として使用optionする場合は、次を使用できます。

CHtml::listData($data,'program_name','program_name') // replaced the 'id' with 'program_name'
于 2013-01-17T10:10:58.693 に答える