2

私はyiiのニュービーで、今学んでいます...

このクエリをモデルで使用して、リストボックスの関連配列を取得しています

public function getAllCategories()
{


    $cats = $this->model()->findAll(array('select'=>'id,name'));
    $mainarr = array();

    foreach($cats as $obj)
        $mainarr["$obj->id"]=$obj->name;

    return $mainarr;
}

私のフォームでは、ドロップダウンリストでこの関数を次のように呼び出しています

<?php echo $form->dropDownList($model,'name',$model->getAllCategories());  ?>

私は多くの異なるクエリで非常に多くのドロップダウンを持っています、そして私はそれをするためのより速い方法を見つけません、そして私はそれを実現するために上記の配列を作成しなければならないたびに。CActiveFormを使用しているものがある場合は、データを入力するためのより適切で高速なソリューションを教えてください。

4

2 に答える 2

2

もっと速く、他にあるかどうかはわかりません。

ただし、関数を使用してコードを減らすことができますCHtml::listData();。少なくとも、モデルクラスで関数を定義する必要性を減らすことができます。

<?php 
    echo $form->dropDownList($model,
      'name',
      CHtml::listData(Modelname::model()->findAll(),'id','name')// $model->getAllCategories()
    );
?>

listData();その連想配列をarray('id'=>'name')フォーマットで取得します。

編集:

優れたMVCプラクティスに従うために、フォームビューを直接表示する代わりに、このフォームを表示するコントローラーアクションでlistDataを使用できます。

public function actionFormDisplayer(){
  // other code
  $list_for_name_dropdown = CHtml::listData(Modelname::model()->findAll(),'id','name');
  // other code
  // then in render pass this value also
  $this->render('viewname',
     array('dropdownoptions'=>$list_for_name_dropdown, // other data to pass
  ));
}

次に、ビューでを使用できます$dropdownoptions

于 2012-07-20T21:08:20.763 に答える
0

メニューモードからのドロップダウンでメニュー名を表示する場合は、次のコードを使用します$ menu_model = Menu :: model()-> findAll();
$ list = CHtml :: listData($ menu_model、'menu_id'、'menu_name'); echo CHtml :: dropDownList('categories'、$ category、$ list、array('empty' =>'(カテゴリを選択')); `

于 2014-07-14T09:46:36.180 に答える