YiiFramework Как сохранять relation's в одной форме?

Василий М.

Новичок
Есть сущность типа Post, есть теги к посту Tag хранящиеся через таблицу связей.

В форме поста ввел мультиселект для выбора тегов:

PHP:
<?= $form->field($model, 'tags')->dropDownList(
        ArrayHelper::map(
            Tag::find()->all(), 'id', 'title'
        ), [
            'multiple' => true
        ]
    ) ?>
В модели Post:
PHP:
   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);
    }
во вьюхе все тоже по-пацански:
PHP:
    <?= 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, нужно сделать так, что бы в select-списке были selected все выбранные пользователем option's. Как этого добиться?
 
Последнее редактирование:

Василий М.

Новичок
Ларк - это что?
за что ты так бд свою ненавидишь?
а что не так?

И что с ответом на вопрос? Вот картинка для тех кто не понял
1. Заполнили форму: http://skrinshoter.ru/s/110118/RixSiZ5U?a (смотри на selected значения в списке)
2. После сабмита выделенное естественно пропало, т.к. связи еще не созданы: http://skrinshoter.ru/s/110118/fn5MTOfi?a
 

Adelf

Administrator
Команда форума
ларка - laravel.
Нельзя на каждое редактирование удалять все теги... бред же.

По твоему вопросы помочь не могу. Yii не знаю.
 

Adelf

Administrator
Команда форума
@Василий М., взять все текущие теги поста. и сравнить с переданными с формы. И только изменения залить в базу. Т.е. создать новые и удалить старые. Я 100 раз так делал.
 

Adelf

Administrator
Команда форума
Как я уже говорил в ларке делается одной строкой. Думаю в Yii тоже есть. manyToMany связь.
 

Василий М.

Новичок
Как я уже говорил в ларке делается одной строкой
ты меня за ларк агитируешь? не надо. я в гробу вас всех с вашими фреймворками видел. у меня задача стоит для работы.

, взять все текущие теги поста. и сравнить с переданными с формы. И только изменения залить в базу. Т.е. создать новые и удалить старые. Я 100 раз так делал.
экономия на спичках?
 
Сверху