@ZaurK

Как правильно передать выбор dropdownlist multiselect на запись в базу в yii2?

Здравствуйте! Есть форма с droplist multiselect
<?php $form = ActiveForm::begin(); ?>
    <?= $form->field($model, 'dtitle')->textInput(['maxlength' => true]) ?>  
    <?= $form->field($model, 'parts')->dropDownList($model->IngredientDropdown,
                                                      [
                                                          'multiple' => 'multiple'
                                                      ]
                                                     ); ?>
    <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? 'Добавить' : 'Редактировать', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
    </div>
    <?php ActiveForm::end(); ?>


В модели:
public function getIngredientDropdown()
    {
        $listIngredient = Ingredient::find()->select('id,ititle')->all();
        $list = ArrayHelper::map( $listIngredient, 'id', 'ititle');
        return $list;      
    }


И контроллер
public function actionCreate()
    {
        $model = new Dish();
        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            $model->parts = implode(",", $_POST['parts']);
            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }
    }


Хочу передать данные на запись в базу, причем выбранные селекты в виде строки чрез запятую. Но выдает ошибку "Значение «Parts» неверно". Прошу подказать что я делаю не так?
  • Вопрос задан
  • 3861 просмотр
Пригласить эксперта
Ответы на вопрос 2
qonand
@qonand
Software Engineer
Т.е. по сути дела Вы хотите что бы при отправке формы, сохранялись данные в связанную таблицу вместе с сохранением модели? Если да - тогда Вы изобретаете велосипед. Прочитайте эту статью на хабре
Ответ написан
Комментировать
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
1. если выбор множественный, то меняем
$form->field($model, 'parts')-
на
$form->field($model, 'parts[]')-
2. вот тут:
if ($model->load(Yii::$app->request->post()) && $model->save()) {
            $model->parts = implode(",", $_POST['parts']);

Вы начале сохранили, потом делаете implode - смысл?К тому же $_POST['parts'] наверняка не существует, скорее всего $_POST['название модели']['parts']
3. вместо implode лучше создать еще одну таблицу, связать с этой и хранить значения там, но в любом случае я бы не использовал implode, лучше использовать yii\helpers\Json и вынести этот функционал в модель beforeSave
4.
Но выдает ошибку "Значение «Parts» неверно".
Такой ошибки не существует, приведите пример реальной ошибки. Хотя она уйдет если исправите выше описанное. Кстати в rules модели сделайте safe для parts, так как это массив и не будет проходить валидацию.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы