yii2:一行中多个值concat的下拉列表

时间:2015-01-04 17:54:08

标签: php yii2

对于我的下拉列表,我正在使用此代码。

<?= $form->field($medicinerequest, '[' . $id . ']' . 'medicine_name')
->DropDownList(ArrayHelper::map(\app\models\Medicine::find()
->asArray()->all(), 'id', 'medicine_name','medicine_id' ),
[ 'prompt' => 'Please Select' ])?> 

我正在获取图片中的下拉列表。但是我希望它在一行中用连字符( - )连接起来。我怎么能这样做?

medicine-request-drop-down

5 个答案:

答案 0 :(得分:44)

ArrayHelper::map($array, $from, $to, $group)使用ArrayHelper::getValue()获取$from$to$group的值。 ArrayHelper::getValue()允许您传递闭包。

  

匿名函数签名应为:function($array, $defaultValue)

因此,您可以将$to设置为

ArrayHelper::map(
    \app\models\Medicine::find()->asArray()->all(),
    'id',
    function($model) {
        return $model['medicine_name'].'-'.$model['medicine_id'];
    }
)

答案 1 :(得分:1)

好的,我找到了解决方案。如果有更好的解决方案,我会欢迎。

我在模型Medicine.php中创建了一个函数

public function getMedicineName(){
        return $this->medicine_name .'-'.$this->medicine_id;
    }

然后在arrayhelper中用medicineName替换了medicine_name,现在我得到了我想要的东西。

答案 2 :(得分:1)

匿名函数可以是

function ($element) {
   return $element['medicine_name'] . '-'. $element['medicine_id'];
}

您可以查看here

答案 3 :(得分:0)

您可以在kartik Depdrop小部件中设置$var,就像在这里的Dropdown小部件中一样。我们使用kartik depdrop小部件

<?php

        $var = ArrayHelper::map(Modelname::find()->where(['id' => $model->customer_id])->all(), 'id',
            function ($model) {
                return $model['id'] .' - '. $model['name'];
            });
        echo $form->field($model, 'id')->widget(DepDrop::classname(), [
            'data' => $var,
            'pluginOptions' => [
                'depends' => [''],
                'url' => Url::to(['#'])
            ]
        ]) ?>

答案 4 :(得分:0)

或者,您可以从控制器 esp 中为相关下拉列表填充它;您返回键=>值对,其中的值从模型字段中连接起来。

echo "<option value='".$model->id."'>"
.$model->field1.' '
.$modle->field2.' '.$model->field3."</option>";