Yii2:如何使用map()在Select2中显示两个字段?
我正在为Yii2使用一个Select2小部件。它显示一个包含用户ID的列表 我需要显示在我的模型中定义的两个名为Users的字段:first\u name\u user和last\u name\u user。像这样: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
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您也可以使用不带对象的函数。很好的解决方案。工作得很有魅力。