Чтобы в Select2
загрузить уже выбранные значения из базы данных, нужно передать массив значений, которые были сохранены в базе данных, в поле модели. Вот как это можно сделать:
1. Подготовка данных в контроллере
В контроллере получите список всех возможных участников ($participantList
) и уже выбранных участников ($model->participants
). Пример:
php
1 2 3 4 5 6 7 8 | use yii\helpers\ArrayHelper; use app\models\Participant; // Получаем список всех участников $participantList = ArrayHelper::map(Participant::find()->all(), 'id', 'name'); // Получаем уже выбранные значения из базы данных $model->participants = [1, 2, 3]; // Пример: массив ID выбранных участников |
2. Использование в виджете Select2
Передайте данные в виджет Select2
в представлении. Убедитесь, что поле модели ($model->participants
) содержит массив ID уже выбранных значений. Пример:
php
1 2 3 4 5 6 7 8 9 10 11 12 | use kartik\select2\Select2; echo $form->field($model, 'participants')->widget(Select2::class, [ 'data' => $participantList, // Список всех участников 'options' => [ 'placeholder' => 'Выберите участников...', 'multiple' => true, // Разрешаем множественный выбор ], 'pluginOptions' => [ 'allowClear' => true, // Кнопка очистки ], ]); |
3. Сохранение данных
При сохранении данных в базу убедитесь, что поле participants
обрабатывается как массив. Например, если вы используете ActiveRecord, можно сериализовать массив или сохранить его в связанной таблице. Пример сохранения в связанной таблице:
php
1 2 3 4 5 6 7 8 9 10 11 12 | if ($model->load(Yii::$app->request->post()) && $model->save()) { // Удаляем старые связи ParticipantAssignment::deleteAll(['model_id' => $model->id]); // Сохраняем новые связи foreach ($model->participants as $participantId) { $assignment = new ParticipantAssignment(); $assignment->model_id = $model->id; $assignment->participant_id = $participantId; $assignment->save(); } } |
4. Загрузка данных при редактировании
Когда вы редактируете запись, просто загрузите уже сохраненные значения в поле модели ($model->participants
), как показано в шаге 1. Select2 автоматически отобразит их как выбранные.