Yii2 select2 选择了一个值 2 和更多时间

Posted

技术标签:

【中文标题】Yii2 select2 选择了一个值 2 和更多时间【英文标题】:Yii2 select2 selected one value 2 and more time 【发布时间】:2022-01-02 03:35:21 【问题描述】:

我有选择2

return $this->form->field($this->model, 'observers')
            ->widget(Select2::className(),
                [
                    'data' => Tasks::getAllStaffsGroupOffice(),
                    'disabled' => !$this->can['changeObservers'],
                    'options' => [
                        'multiple' => true,
                        'value' => ArrayHelper::map($this->model->observers, 'staff_id', 'staff_id'),
                        'placeholder' => Yii::t('tasks_forms', 'FORM_PLACEHOLDER_CHOOSE'),
                        'class' => 'hiddenInput'
                    ],
                    'pluginOptions' => [
                        'allowClear' => true,
                        'closeOnSelect'=> false,

                    ],
                    'pluginLoading' => false,
                ]);

Tasks::getAllStaffsGroupOffice() 按办公室获取用户数组。示例 ->

 array:4 [▼
  "main office" => array:1 [▼
    2 => "123 123"
  ]
  "office 1" => array:3 [▼
    3 => "staff_1"
    6 => "staff_2"
    2 => "123 123"
  ]
  "office 3" => array:2 [▼
    4 => "staff_3"
    3 => "staff_1"
  ]
  "office 2" => array:2 [▼
    5 => "staff_4"
    3 => "staff_1"
  ]
]

select2 值示例 -> array (2 => "2")

结果,小部件本身的显示看起来像这样 select2 value

如何让在2个及以上办公室的员工只显示1次?

【问题讨论】:

【参考方案1】:

我认为您应该过滤您的员工​​列表,然后将其传递给 Select2 小部件。我创建一组独特的员工的方法是这样的:

$allStaffsGroupOffice = [
    "main office" => [
        2 => "123 123"
    ],
    "office 1" => [
        3 => "staff_1",
        6 => "staff_2",
        2 => "123 123"
    ],
    "office 3" => [
        4 => "staff_3",
        3 => "staff_1"
    ],
    "office 2" => [
        5 => "staff_4",
        3 => "staff_1"
    ]
];
$repeatedStaff = [];
$newUniqueList = [];
foreach ($allStaffsGroupOffice as $office => $staffList) 
    foreach ($staffList as $staffId => $staffName) 
        if (!in_array($staffId, $repeatedStaff)) 
            $repeatedStaff[] = $staffId;
            $newUniqueList[$office][$staffId] = $staffName;
        
    

$newUniqueList 将是您的新阵列,其中包含拥有独特员工的办公室。

【讨论】:

问题是同一员工可以出现在 2 个或多个不同的办公室,在 select2 小部件中,员工应该显示在它所在的那些办公室。这样您就可以从任何办公室中选择它

以上是关于Yii2 select2 选择了一个值 2 和更多时间的主要内容,如果未能解决你的问题,请参考以下文章

Yii2 - 使用 Ajax 加载为 Select2 插件设置值

在 yii2 的 select2 下拉菜单中设置默认值

如何从 Select2 Widget Yii2 将多个值保存到数据库

如何在 select2 yii2 中设置选定值或默认值?

在 Yii2 Kartik Select2 小部件中,如何对选择事件进行 ajax 调用?

Yii2 Select2 - 更新时选择的值 - 联结表(多对多)