Model::loadMultiple

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
kolomat
Сообщения: 3
Зарегистрирован: 2021.03.23, 16:21

Model::loadMultiple

Сообщение kolomat »

Добрый день, помогите разобраться с Model::loadMultiple. Для практики пишу небольшое приложение и делаю раздел настроек в котором использует для сохрания настроек Active Form
Таблице в Бд по сути состоит из 4 полей id, code, key, value.

Попробовал сделать так

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

    public function actionMarket1()
    {
        $settings = Setting::find()->where(['code' => 'market1'])->all();

        if (Model::loadMultiple($settings, Yii::$app->request->post()) && Model::validateMultiple($settings)) {
            foreach ($settings as $setting) {
                $setting->save();
                Yii::$app->session->setFlash('success', "Данные успешно сохранены");
            }
            return $this->redirect('market1');
        }

        return $this->render('market1', ['settings' => $settings]);
    }
    
        public function actionMarket2()
    {
        $settings = Setting::find()->where(['code' => 'market2'])->all();

        if (Model::loadMultiple($settings, Yii::$app->request->post()) && Model::validateMultiple($settings)) {
            foreach ($settings as $setting) {
                $setting->save();
                Yii::$app->session->setFlash('success', "Данные успешно сохранены");
            }
            return $this->redirect('market2');
        }

        return $this->render('market2', ['settings' => $settings]);
    }
Представление для Market1 (в бд code = market1, key = apiKey, value = значение)

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

	            <?php $form = ActiveForm::begin(); ?>
                    <?php
                    foreach ($settings as $index => $setting) {
                        switch ($setting['key']) {
                            case 'apiKey':
                                echo $form->field($setting, "[$index]value")->label('Ключ Api');
                        }
                    }
                    ?>
                    <div class="form-group">
                        <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success']) ?>
                    </div>
                    <?php ActiveForm::end(); ?>
Представление для Market2 (в бд code = market2, key = login, key = password, value = значение)

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


	            <?php $form = ActiveForm::begin(); ?>
                    <?php
                    foreach ($settings as $index => $setting) {
                        switch ($setting['key']) {
                            case 'login':
                                echo $form->field($setting, "[$index]value")->label('Логин');
                                break;
                            case 'password':
                                echo $form->field($setting, "[$index]value")->label('Пароль');
                                break;
                        }
                    }
                    ?>
                    <div class="form-group">
                        <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success']) ?>
                    </div>
                    <?php ActiveForm::end(); ?>

По сути при таком подходе проблемы возникает две. Первая это если пустая таблица, тогда понятное дело не выводятся инпуты для заполнения и вторая, если один раз заполнить эти поля, то при повторной попытке сохранения формы данные почему то не меняются
Подскажите в чем может быть причина или возможно посоветуйте как правильно реализовать сохранения разнообразных настроек в одной таблице.
Ответить