在 yii 中使用 listdata 连接 2 列

Concat 2 columns using listdata in yii

我想制作一个下拉菜单,它可以显示 2 列的连接

这是我的代码:

  $list = CHtml::listData(Coa::model()->findAllBySql("SELECT id, concat(name,' - ',saldo) as info FROM coa where id_type = 1"),'id','info');
  echo CHtml::dropDownList('id_coa','id', $list, array('prompt'=>'choose account','class'=>'form-control'));

和 table 由 id, id_type, name 和 saldo.

组成

我想连接 name 和 saldo, 然后把它放在下拉选项中

我已经尝试了 findAllBySql 中的代码,它运行良好 当我把它放在 yii 上时,它不起作用。

改变

echo CHtml::dropDownList('id_coa','id', $list, array('prompt'=>'choose account','class'=>'form-control'));

echo CHtml::dropDownList('id_coa','id', $list, array('prompt'=>'choose account','class'=>'form-control'));

因为在 CHtml::dropdownlist 中第二个参数是默认选择值。您不能指定列名。

在模型 class 中创建一个 getter 函数,它将 return 两个字段的值放在一个字符串中,如下所示:

class Coa extends CActiveRecord {
    // ...
    public function getNamesaldo() {
        return sprintf('%s %s', $this->name, $this->saldo);
    }
    // ...
}

然后不使用任何 concat 函数照常获取记录,但是两个字段都应该在 select 查询中。因此,模型函数可以 return 一个字符串中的两个值:

$model_data = Coa::model()->findAllBySql(
    "SELECT id, name, saldo FROM coa where id_type = 1");

现在,这里调用listData并指定型号属性idgetter名称,如:

$list = CHtml::listData($model_data, 'id', 'namesaldo');
echo CHtml::dropDownList('id_coa', 'id', $list, array(
    'prompt' => 'choose account', 'class' => 'form-control'));

就这些了:)