Yii2:如何使用 map() 在 Select2 中显示两个字段?
Yii2: How to use map() to show two fields in a Select2?
我正在为 Yii2 使用 Select2 小部件。它显示了一个包含用户 ID 的列表。
我需要显示我的模型中定义的两个名为 Users 的字段:first_name_user 和 last_name_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')
])
?>
对于 Select2
,您需要使用 data
选项而不是 items
。
您需要修改 query
以显示串联的 first_name_user
和 last_name_user
作为别名,然后 return 它与 id
列将由 ArrayHelper::map()
在 Select2
中使用。
最好向您用来填充表单的模型添加一个函数,然后 return 从那里向 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
],
]);
?>
型号
在顶部添加 use app\models\Users;
和 use 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;
}
_form
<?= $form->field($model, 'id_user')->widget(Select2::className(), [
'data' => $model->userList(),
'options' => ['placeholder' => 'Select User'],
]) ?>
我正在为 Yii2 使用 Select2 小部件。它显示了一个包含用户 ID 的列表。
我需要显示我的模型中定义的两个名为 Users 的字段:first_name_user 和 last_name_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')
])
?>
对于
Select2
,您需要使用data
选项而不是items
。您需要修改
query
以显示串联的first_name_user
和last_name_user
作为别名,然后 return 它与id
列将由ArrayHelper::map()
在Select2
中使用。
最好向您用来填充表单的模型添加一个函数,然后 return 从那里向 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
],
]);
?>
型号
在顶部添加 use app\models\Users;
和 use 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;
}
_form
<?= $form->field($model, 'id_user')->widget(Select2::className(), [
'data' => $model->userList(),
'options' => ['placeholder' => 'Select User'],
]) ?>