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

Европа - быстрые серверы на дисках NVMe от $5 / Русский датацентр от 199руб

Тема в разделе "Yii Framework", создана пользователем Василий М., 12 янв 2018.

  1. Василий М.

    Василий М. Новичок

    Сообщения:
    616
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Есть сущность типа 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. Как этого добиться?
     
    Последнее редактирование: 12 янв 2018
  2. Adelf

    Adelf Laravel&PhpStorm Команда форума

    Сообщения:
    3.255
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    за что ты так бд свою ненавидишь?

    в ларке это делается одной строкой. $post->tags()->sync($tagsIdArray);
     
  3. Василий М.

    Василий М. Новичок

    Сообщения:
    616
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Ларк - это что?
    а что не так?

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

    Adelf Laravel&PhpStorm Команда форума

    Сообщения:
    3.255
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    ларка - laravel.
    Нельзя на каждое редактирование удалять все теги... бред же.

    По твоему вопросы помочь не могу. Yii не знаю.
     
  5. Василий М.

    Василий М. Новичок

    Сообщения:
    616
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    почему? что ты предлагаешь?
     
  6. Adelf

    Adelf Laravel&PhpStorm Команда форума

    Сообщения:
    3.255
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    @Василий М., взять все текущие теги поста. и сравнить с переданными с формы. И только изменения залить в базу. Т.е. создать новые и удалить старые. Я 100 раз так делал.
     
  7. Adelf

    Adelf Laravel&PhpStorm Команда форума

    Сообщения:
    3.255
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    Как я уже говорил в ларке делается одной строкой. Думаю в Yii тоже есть. manyToMany связь.
     
  8. Василий М.

    Василий М. Новичок

    Сообщения:
    616
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    ты меня за ларк агитируешь? не надо. я в гробу вас всех с вашими фреймворками видел. у меня задача стоит для работы.

    экономия на спичках?
     
  9. Adelf

    Adelf Laravel&PhpStorm Команда форума

    Сообщения:
    3.255
    Ваш город:
    Казань
    Address:
    Kazan, Russia
    Country:
    Location on Map:
    Ты безнадежен.
     
  10. Василий М.

    Василий М. Новичок

    Сообщения:
    616
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    часовой пояс Казани вроде +3
    сейчас час ночи
    что ты тут сидишь-высижиываешь? иди спать!!
     
    Adelf нравится это.