Yii2 kartik select2 виджет, показывающий значения тоже проблема - PullRequest
2 голосов
/ 15 февраля 2020

Я создал виджет yii2 kartik select2 для выбора нескольких моделей автомобилей, как показано ниже

<?= Select2::widget([
        'name' => 'drp-make',
        'data' => Car::getCarMakesEnglish(),
        'value' => explode(",",$model->drp_make),
        'options' => [
          'id'=>'drp-make',
          'placeholder' => 'All Makes',
          'multiple' => true
        ]
      ]); ?>

И функцию для получения данных для select2, например

 public static function getCarMakesEnglish(){
            $out=array();
        $makes=CarMakes::find()->select(['id','make_eng'])->all();
        foreach ($makes as $make) {
            array_push($out,array($make['id'] => $make['make_eng']));
        }
        return $out;
    }

Работает идеально. Но проблема есть. Пожалуйста, смотрите картинку ниже

enter image description here

Здесь показаны значения, а не только имена. Я хочу показать только имена производителей. Как это сделать

Ответы [ 2 ]

1 голос
/ 15 февраля 2020

Поскольку вы помещаете массив в каждый индекс $out

array_push($out,array($make['id'] => $make['make_eng']))

, вы должны использовать yii\helpers\ArrayHelper::map() вместо этого, который сделает это за вас. Измените вашу функцию getCarMakesEnglish() на следующую

public static function getCarMakesEnglish()
{
    $makes = CarMakes::find()->select(['id', 'make_eng'])->all();
    return \yii\helpers\ArrayHelper::map($makes,'id','make_eng');
}
0 голосов
/ 22 февраля 2020

В дополнение к ответу @MuhammadOmerAslam, вы можете избежать ArrayHelper::map() для простого сценария, используя column ()

public static function getCarMakesEnglish()
{
    return CarMakes::find()->select('make_eng')->indexBy('id')->column();
}
...