YII中CHtml::listData方法第一个参数(models)的使用

来源:互联网 发布:加大码女装胖人服装淘宝网 编辑:程序博客网 时间:2024/05/23 15:45

public static array listData(array $models, string $valueField, string $textField, string $groupField='')

$models array 模型对象的列表。这个参数也可以是一个关联的数组(例如CDbCommand::queryAll的结果)。

问题描述:

<?php echo $form->textField($model, 'staff_name',array('class'=>'input','style'=>'width:150px'));echo CHtml::ajaxButton('查询',$this->createUrl('cost/searchname'),array('type'=>'POST','update'=>'#Cost_staff_id','data'=>array('staff_name'=>"js:$('#Cost_staff_name').val()",'YII_CSRF_TOKEN'=>Yii::app()->request->csrfToken),));       echo CHtml::activeDropDownList($model, 'staff_id',        Staff::getRealname($model->staff_id),        array('empty'=>'请选择',        )); ?>

Staff模型中的getRealname方法:

public static function getRealname($id){$result=self::model()->findByPk($id);        var_dump($result);exit;return CHtml::listData($result, 'id', 'realname');}

返回的结果为

array(1) {
  [""]=>
  NULL
}

采用以下方案,均可得出正确结果:

public static function getRealname($id){$a=array('id'=>2,'realname'=>'真实姓名',);$b=array('a'=>$a,);var_dump(CHtml::listData($b, 'id', 'realname'));exit;}

public static function getRealname($id){$result=self::model()->findAllByPk($id);return CHtml::listData($result, 'id', 'realname');}

总结:

如果是用AR做为数据源,应使用findAll()、findAllByPk()、findAllBySql() ...等所有活动记录。而不能使用find、findByPk()..等仅获取单一活动记录。

如果为数组,该数组为二维数组。