Yii2:如何使用map()在Select2中显示两个字段?

Yii2:如何使用map()在Select2中显示两个字段?,yii2,map-function,yii-widgets,Yii2,Map Function,Yii Widgets,我正在为Yii2使用一个Select2小部件。它显示一个包含用户ID的列表 我需要显示在我的模型中定义的两个名为Users的字段:first\u name\u user和last\u name\u user。像这样: Daniel Gates John Connor John Doe Maria Key 但我不知道如何使用map()显示多个字段 <?= $form ->field($model, 'id_user') ->widget(\common\widg

我正在为Yii2使用一个Select2小部件。它显示一个包含用户ID的列表

我需要显示在我的模型中定义的两个名为Users的字段:first\u name\u userlast\u name\u user。像这样:

Daniel Gates
John Connor
John Doe
Maria Key
但我不知道如何使用map()显示多个字段

<?= $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')
    ])
?>

  • 对于
    选择2
    ,您需要使用
    数据
    选项而不是
    项目

  • 您需要修改您的
    查询
    以显示串联的
    名字用户
    姓氏用户
    作为别名,然后将其与
    id
    列一起返回,以便
    通过
    ArrayHelper::map()
    Select2
    中使用

  • 最好在用于填充表单的模型中添加一个函数,并将结果返回到
    ArrayHelper::map()
    。 您的查询应该如下所示

    function userList(){
    return \app\models\Users::find()
           ->select([new \yii\db\Expression('[[id_user]],CONCAT([[first_name_user]]," ",[[last_name_user]]) as full_user_name')])
           ->orderBy('name_user')
           ->all();
    }
    
    您的表单字段应该如下所示

    <?=
    $form->field($model, 'id_user')->widget(Select2::className(), [
        'data' => \yii\helpers\ArrayHelper::map($model->userList(), 'id_user', 'full_user_name'),
        'options' => [
            'placeholder' => 'Select User',
            'id' => 'id_user'
        ],
        'theme' => Select2::THEME_DEFAULT,
        'pluginOptions' => [
            'allowClear' => true
        ],
    ]);
    ?>
    
    
    
  • 对于
    选择2
    ,您需要使用
    数据
    选项而不是
    项目

  • 您需要修改您的
    查询
    以显示串联的
    名字用户
    姓氏用户
    作为别名,然后将其与
    id
    列一起返回,以便
    通过
    ArrayHelper::map()
    Select2
    中使用

  • 最好在用于填充表单的模型中添加一个函数,并将结果返回到
    ArrayHelper::map()
    。 您的查询应该如下所示

    function userList(){
    return \app\models\Users::find()
           ->select([new \yii\db\Expression('[[id_user]],CONCAT([[first_name_user]]," ",[[last_name_user]]) as full_user_name')])
           ->orderBy('name_user')
           ->all();
    }
    
    您的表单字段应该如下所示

    <?=
    $form->field($model, 'id_user')->widget(Select2::className(), [
        'data' => \yii\helpers\ArrayHelper::map($model->userList(), 'id_user', 'full_user_name'),
        'options' => [
            'placeholder' => 'Select User',
            'id' => 'id_user'
        ],
        'theme' => Select2::THEME_DEFAULT,
        'pluginOptions' => [
            'allowClear' => true
        ],
    ]);
    ?>
    
    
    
    型号

    添加
    使用app\models\Users
    使用yii\helpers\ArrayHelper在顶部

    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;
    }
    
    \u表单

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

    添加
    使用app\models\Users
    使用yii\helpers\ArrayHelper在顶部

    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;
    }
    
    \u表单

    <?= $form->field($model, 'id_user')->widget(Select2::className(), [
        'data' => $model->userList(),
        'options' => ['placeholder' => 'Select User'],
    ]) ?>
    
    
    
    为您添加了一个答案检查这是否有助于您添加了一个答案检查这是否有助于您解决此问题此积垢来自一个名为Sports的表格。我应该在用户模型文件或运动模型文件中定义userList()函数吗?理想情况下,它应该在用户模型中,您只需要从放置它的任何模型中调用它@Roby Sottini该CRUD来自一个名为Sports的表。我应该在用户模型文件或运动模型文件中定义userList()函数吗?理想情况下,它应该在用户模型中,您只需要从放置它的任何模型调用它@Roby Sottini为什么userList()函数是静态的?@RobySottini您也可以使用不带对象的函数。很好的解决方案。工作起来很有魅力。为什么userList()函数是静态的?@RobySottini您也可以使用不带对象的函数。很好的解决方案。工作得很有魅力。