wbraganca / yii2-dynamicform

It is widget to yii2 framework to clone form elements in a nested manner, maintaining accessibility.
Other
436 stars 439 forks source link

No update data: Unknown Property – yii\base\UnknownPropertyException #219

Open Edenloba opened 7 years ago

Edenloba commented 7 years ago

Hello,

I like your extension! I've implemented dynamicform in my project, i can create, but it does not update the data. Please advice!

My model is:

<?php

namespace backend\modules\siens\models;

use Yii; use yii\db\ActiveRecord; use yii\behaviors\AttributeBehavior; /**

/**/ My Controller actionUpdate is:

public function actionUpdate($id)
{
    $model = $this->findModel($id);         // crea una instancia con la ficha actual
    $modelsMiembro = $model->padronTemps;   // crea un array con el detalle previo

    if ($model->load(Yii::$app->request->post()) ) {

        $oldIDs = ArrayHelper::map($modelsMiembro, 'id', 'id'); // array 
        $modelsMiembro = Model::createMultiple(PadronTemp::classname(), $modelsMiembro);
        Model::loadMultiple($modelsMiembro, Yii::$app->request->post());
        $deletedIDs = array_diff($oldIDs, array_filter(ArrayHelper::map($modelsMiembro, 'id', 'id')));

        // validate all models
        $valid = $model->validate();
        $valid = Model::validateMultiple($modelsMiembro) && $valid;

        if ($valid) {
            $transaction = \Yii::$app->db->beginTransaction();
            try {
                if ($flag = $model->save(false)) {
                    if (! empty($deletedIDs)) {
                        PadronTemp::deleteAll(['id' => $deletedIDs]);
                    }
                    foreach ($modelsMiembro as $modelMiembro) {
                        //$modelMiembro->customer_id = $model->id;
                        $modelMiembro->ppt_num_vivienda = $model->vivt_numero;
                        if (! ($flag = $modelMiembro->save(false))) {
                            $transaction->rollBack();
                            break;
                        }
                    }
                }
                if ($flag) {
                    $transaction->commit();
                    return $this->redirect(['view', 'id' => $model->vivt_numero]);
                }
            } catch (Exception $e) {
                $transaction->rollBack();
            }
        }

    } //else {
        return $this->render('update', [
            'model' => $model,
            'modelsMiembro' => (empty($modelsMiembro)) ? [new PadronTemp] : $modelsMiembro
        ]);
    //}
}