Есть сущность типа
Post, есть теги к посту
Tag хранящиеся через таблицу связей.
В форме поста ввел мультиселект для выбора тегов:
<?= $form->field($model, 'tags')->dropDownList(
ArrayHelper::map(
Tag::find()->all(), 'id', 'title'
), [
'multiple' => true
]
) ?>
В модели Post:
public function afterSave($insert, $changedAttributes)
{
Tag2post::deleteAll(['post_id' => $this->id]);
if (!empty($this->tags)) {
foreach ($this->tags as $tag) {
if (($tag = Tag::findOne($tag)) !== null) {
$relation = new Tag2post();
$relation->post_id = $this->id;
$relation->tag_id = $tag->id;
$relation->save();
}
}
}
parent::afterSave($insert, $changedAttributes);
}
view:
<?= DetailView::widget([
'model' => $model,
'attributes' => [
// ..
[
'attribute' => 'tags',
'value' => function ($model) {
$list = [];
foreach ($model->getTags()->all() as $tag) {
$list[] = $tag->title;
}
return empty($list) ? 'теги не указаны' : implode(', ', $list);
},
]
],
]) ?>
когда происходит ошибка формы при Create (например, не пропускает валидатор post-запрос), нужно сделать так, что бы в select-списке были selected все выбранные пользователем option's. Как этого добиться?