Как избавиться от колхоза при сохранении связанных данных с checkboxlist

Обсуждение документации второй версии фреймворка. Переводы Cookbook и авторские рецепты.
Ответить
podolski
Сообщения: 4
Зарегистрирован: 2020.05.05, 11:42

Как избавиться от колхоза при сохранении связанных данных с checkboxlist

Сообщение podolski »

Всем привет
У меня есть несколько вопросов по сохранению связанных данных из формы
Есть модель Post, данные о посте
есть связанныая модель в которой храняться дополнительные данные поста, связь один ко многим
на форме данные из этой таблицы представленны ввиде чек боксов

Код: Выделить всё

 
         <div class="col-3"><?= $form->field($model, 'name') ?> </div>
         
        <div class="col-12 check-box-list-admin">
            <?= $form->field($userComfort, 'prop_id', [

            ])->checkboxList($comfort, ['item' => function ($index, $label, $name, $checked, $value) {

                if ($checked == 1) $check = 'checked';
                else $check = '';

                return "<span class='wrap-check-box-list'><input class='checkbox-cabinet' id='{$name}{$value}' type='checkbox' {$check} name='{$name}' value='{$value}'><label class='check-box-list-label' for='{$name}{$value}'>{$label}</label></span>";

            }])->label('Удобства:') ?>


        </div>
У меня возникает непонятная ситуация при сохранении, выводе данных пользователю для изменения и обновлении данных из связанных таблиц
При сохранении приходится либо переопределять метод save либо делать вспомогательные методы типа такого

Код: Выделить всё

    public static function save($class, $property, $userId)
    {
        if (is_array($property)){

            foreach ($property as $item){

                $object = new $class;

                $object->prop_id  = $item;
                $object->user_id  = $userId;

                $object->save();


            }
        }
    }
При получении данных для редактирования тоже не все гладко
что бы скормить данные в $form->field сделал вот так :

Код: Выделить всё

	$userComfort->prop_id = ArrayHelper::getColumn(UserComfort::find()->where(['user_id' => $model->id])->all(), 'prop_id');
мне кажется что такое решение нельзя отнести к "лучшим практикам")) поиски стороннего решения результатов особо не дали
Если кто знает более лучшее решение этой задачи прошу поделится ним со мной

unknownby
Сообщения: 648
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Как избавиться от колхоза при сохранении связанных данных с checkboxlist

Сообщение unknownby »

podolski писал(а):
2020.05.05, 12:21
мне кажется что такое решение нельзя отнести к "лучшим практикам")) поиски стороннего решения результатов особо не дали
Если кто знает более лучшее решение этой задачи прошу поделится ним со мной
Пробовали такого плана?
yii2-linker-behavior
А вместо вывода множества чекбоксов можно вывести список этих же значений в виде множественного выбора.
https://prnt.sc/11ui5c1

Аватара пользователя
yiijeka
Сообщения: 3101
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Как избавиться от колхоза при сохранении связанных данных с checkboxlist

Сообщение yiijeka »

Ещё можно прикрутить JS и при клике на чекбокс отправлять сразу запрос на сервер. Тогда у вас не будет вообще проблем с сохранением many to many , один ко многим и подобного....

На сервер будет прилетать простой массив ['prop' => 'value', 'post_id => 'postId'] - Такое вполне можно обработать просто и красиво.

Ответить