Search code examples
yii2map-functionyii-widgets

Yii2: How to use map() to show two fields in a Select2?


I am using a Select2 widget for Yii2. It shows a list with the ids of the users.

I need to show two fields defined in my model called Users: first_name_user and last_name_user. Like this:

Daniel Gates
John Connor
John Doe
Maria Key

But I don't know how use map() to show more than one field.

<?= $form
    ->field($model, 'id_user')
    ->widget(\common\widgets\Select2::classname(), [
        'items' => \yii\helpers\ArrayHelper::map(\app\models\Users::find()->orderBy('name_user')->all(), 'id_user', 'name_user')
    ])
?>

Solution

  • Model

    Add use app\models\Users; and use yii\helpers\ArrayHelper; at top.

    public function userList()
    {
        $userList  = [];
        $users = Users::find()->orderBy('first_name_user')->all();
    
        $userList = ArrayHelper::map($users, 'id_user', function ($user) {
           return $user->first_name_user.' '.$user->last_name_user;
        });
    
        return $userList;
    }
    

    _form

    <?= $form->field($model, 'id_user')->widget(Select2::className(), [
        'data' => $model->userList(),
        'options' => ['placeholder' => 'Select User'],
    ]) ?>