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

jerry Yii 2015年08月12日 收藏
  1. <?php echo $form->textField($model, 'staff_name',array('class'=>'input','style'=>'width:150px'));  
  2. echo CHtml::ajaxButton('查询',  
  3.     $this->createUrl('cost/searchname'),  
  4.     array(  
  5.         'type'=>'POST',  
  6.         'update'=>'#Cost_staff_id',  
  7.         'data'=>array('staff_name'=>"js:$('#Cost_staff_name').val()",'YII_CSRF_TOKEN'=>Yii::app()->request->csrfToken),  
  8.     ));  
  9.   
  10.        echo CHtml::activeDropDownList($model, 'staff_id',  
  11.             Staff::getRealname($model->staff_id),  
  12.             array(  
  13.             'empty'=>'请选择',  
  14.             )  
  15. ); ?>

Staff模型中的getRealname方法:
[php] view plaincopy

  1. public static function getRealname($id)  
  2. {  
  3.     $result=self::model()->findByPk($id);  
  4.         var_dump($result);exit;  
  5.     return CHtml::listData($result, 'id', 'realname');  
  6. }

返回的结果为

  1. array(1) {
  2.   [""]=>
  3.   NULL
  4. }


采用以下方案,均可得出正确结果:
[php] view plaincopy

  1. public static function getRealname($id)  
  2. {  
  3.     $a=array(  
  4.         'id'=>2,  
  5.         'realname'=>'真实姓名',  
  6.     );  
  7.     $b=array(  
  8.         'a'=>$a,  
  9.     );  
  10.     var_dump(CHtml::listData($b, 'id', 'realname'));exit;  
  11. }



[php] view plaincopy

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

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