2015-01-04 6 views
15

für meine Dropdown-Liste Ich verwende diesen Code.yii2: Dropdown-Liste für mehrere Werte concat in einer Zeile

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

Ich bekomme die Dropdown-Liste wie auf dem Bild. Aber ich möchte, dass es durch Bindestrich (-) in einer Zeile verkettet wird. Wie kann ich das machen?

medicine-request-drop-down

Antwort

35

ArrayHelper::map($array, $from, $to, $group) verwendet ArrayHelper::getValue() die Werte von $from, $to und $group zu erhalten. ArrayHelper::getValue() können Sie Schließungen übergeben.

Die Signatur der anonymen Funktion sollte wie folgt lauten: function($array, $defaultValue).

wie Sie $to als

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

Obwohl ich bei meiner Lösung bleiben werde, da dies an vielen Stellen mit einer Deklaration verwendet werden kann. Aber Sie haben die richtige Vorgehensweise gut erklärt, ich werde Ihre Antwort akzeptieren. – Pawan

+1

$ Modell sollte ein Array sein, kein Objekt. Also zurückgeben $ model ['medicine_name'] .'- '. $ Model [' medicine_id ']; –

+1

@DiegoBetto danke. Zur späteren Bezugnahme können Sie die Antwort selbst bearbeiten, um sie zu verbessern. – topher

1

Ok fand ich die Lösung. Ich werde es begrüßen, wenn es eine bessere Lösung gibt.

Ich habe eine Funktion im Modell Medicine.php erstellt

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

und dann in der arrayhelper ersetzt medicine_name mit medicineName und jetzt bin ich bekommen, was ich suchte.

1

Die anonyme Funktion könnte kann

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

Sie sich here überprüfen einstellen können!