Yii chtml:来自数据库的listData,包含1个键和2个值

时间:2013-11-15 00:38:24

标签: drop-down-menu yii

我有一个填充了数据库的下拉列表。它可以很好地使用1个键和1个值。但是我如何使用1个键和2个值来处理它。这两个值是名字和姓氏。

<?php
    $id = Yii::app()->user->id;    
    $clients = Clients::model()->findAll(array("condition"=>"cId =  $id"));
    $list = CHtml::listData($clients, 'id', 'fname');
?>

<?php echo $form->labelEx($model,'clientId'); ?>

<?php echo CHtml::dropDownList('clientId', $model, $list, array(
    'empty' => 'Select a client',
    'class' => 'form-control'
)); ?>

<?php echo $form->error($model,'clientId'); ?>

//needs something like this 
$list = CHtml::listData($clients, 'id', 'fname lname');

2 个答案:

答案 0 :(得分:2)

我认为您应该将fullname定义为virtual attribute并将其用于您的下拉列表。

例如:

我想你有一个模型Person包含firstnamelastname。您可以定义virtual attribute,如:

class Person extends CActiveRecord {
   public function getFullName()
   {
      return $this->firstname . " " . $this->lastname;
   }
   ...
}

在视图中,您可以使用CHtml :: listData,如:

echo $form->dropDownList($model, 'personid',
    CHtml::listData( Person::model()->findAll(), 'id', 'fullname' )
);

我希望它对你有用。

答案 1 :(得分:1)

我使用这种简单的方法来记录下拉列表中的属性/字符串。您甚至可以为选项组使用第三个参数。

echo  $form->dropDownListRow($model,'personid',
CHtml::listData(Person::model()->findAll(
array("select"=>"id,concat(firstname ,' ',lastname) as fullname")),
'id', 'fullname'));

在模型类

public $fullname;