Как вывести в виде селекта данные из базы

Доброго времени суток.

Не могу понять как можно взять из базы данных имена городов и их ID и сделать из этого форму типа селект.

Подскажите пожалуйста.

  1. Сначала обрабатываешь CHtml::listData(…)

http://www.yiiframework.com/doc/api/CHtml#listData

  1. Затем выводишь сам select

http://www.yiiframework.com/doc/api/CHtml#dropDownList-detail

Сделал вот так в контролере было написано следующще




    $data = ConstCity::model()->findAll();

    $this->render('create',array('model'=>$model,'data'=>$data,));

    

Где $data типа CActiveRecord

Во вьювере




<div class="form">

<?php $form=$this->beginWidget('CActiveForm'); ?> 

   ...

  <div class="row">

      <td><?php echo $form->labelEx($model,'city'); ?></td>

      <td><?php echo $form->dropDownList('city','',Chtml::listData($dataProvider,'city_id','city_name')); ?>

      <?php echo $form->error($model,'city'); ?></td>

  </div>

  ....

<?php $this->endWidget(); ?>



Получил ошибку Invalid argument supplied for foreach()

Посмотрел в описании функции нашел такую строку

Что выходит даный способ только для типа CDbCommand а c CActiveRecord нельзя или я ошибаюсь и что то не так делаю.

Маленько не так делаете.

  1. Вы же не передаете во view $dataProvider :) поэтому и ничего и не выходит. В Вашем случае надо заменить $dataProvider на $data.

<td><?php echo $form->dropDownList(‘city’,’’,Chtml::listData($data,‘city_id’,‘city_name’)); ?>

  1. Либо в контроллере получать данные при помощи



$dataProvider = new CActiveDataProvider('city', array(...));

$this->render('..', array('dataProvider'=>$dataProvider));



а затем во вью




<td><?php echo $form->dropDownList('city','',Chtml::listData($dataProvider->getData(),'city_id','city_name')); ?>



Спасибо, все понятно.