Yii2: назначить сумму текстовых полей другому полю в форме - PullRequest
0 голосов
/ 30 апреля 2018

Я новичок в Yii, и я пытаюсь назначить сумму из 3 различных полей в моем _form.php в общее поле. Я попытался назначить его непосредственно в контроллере, но общее поле остается нулевым. Я в основном пытаюсь добиться этого:

$model->cuerdas= $model->propia + $model->usofructo + $model->arrendada;

Это код actionCreate контроллера, в котором я пытался выполнить назначение:

 public function actionCreate()
{
    $model = new AsdaPa0025();
    $modelosfacilidades = [new FacilidadesARealizar0025()];

    if ($model->load(Yii::$app->request->post())) {
        $model->file = UploadedFile::getInstance($model, 'file');
        $modelosfacilidades = Model::createMultiple(FacilidadesARealizar0025::classname());
        Model::loadMultiple($modelosfacilidades, Yii::$app->request->post());

        //valida los modelos
        $valid = $model->validate();
        $valid = Model::validateMultiple($modelosfacilidades) && $valid;

        if ($valid) {
            $transaction = \Yii::$app->db->beginTransaction();
            try {
                if ($flag = $model->save(false)) {
                    foreach ($modelosfacilidades as $modelofacilidades) {
                        //Aqui le digo al controlador que id_0025 es igual al id de la instancia de la forma 0025
                        $modelofacilidades->id_0025 = $model->id_asda_pa_0025;
                        if (! ($flag = $modelofacilidades->save(false))) {
                            $transaction->rollBack();
                            break;
                        }
                    }
                }
                if ($flag) {
                    $transaction->commit();
                    $model->cuerdas= $model->propia + $model->usofructo + $model->arrendada;
                    $model->file->saveAs('uploads/' . $model->file->baseName . '.' . $model->file->extension);
                    return $this->redirect(['view', 'id' => $model->id_asda_pa_0025]);
                }
            } catch (Exception $e) {
                $transaction->rollBack();
            }
        }

       // $model->file = 'uploads/' . $model->imageFile->baseName . '.' . $model->imageFile->extension;

       // if ($model->save()) {
        //    $model->file->saveAs('uploads/' . $model->file->baseName . '.' . $model->file->extension);
          //  return $this->redirect(['view', 'id' => $model->id_asda_pa_0025]);
     }
     else{
      // return $this->redirect(['view', 'id' => $model->id_asda_pa_0025]);

      return $this->render('create', [
        'model' => $model,
        'modelosfacilidades' => (empty($modelosfacilidades)) ? [new FacilidadesARealizar0025] : $modelosfacilidades

    ]);

     }


   }

Я также пытался вызвать эту функцию из модели в контроллере вместо ручного назначения, но я получаю , используя this -> (), когда отсутствует в контексте объекта ошибка

/**
 * @return \yii\db\ActiveQuery
 */
public static function getSuma()
{

  return $this->find()->sum('propia + arrendada + usofructo');


}

Это мой _form.php, где поля:

<div class="col-sm-6">
         Cuerdas
         <?= $form->field($model, 'propia')->textInput()->label('7.Propia') ?>
         <?= $form->field($model, 'arrendada')->textInput()->label('8.Arrendada') ?>
         <?= $form->field($model, 'usofructo')->textInput()->label('9.Usufructo') ?>
         <?= $form->field($model, 'cuerdas')->textInput(['readOnly'=> true])->label('10. Total Cuerdas')?>


    </div>

Я сделал входной сигнал поля cuerdas доступным только для чтения, поскольку он будет тем, который получит сумму трех других значений.

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

1 Ответ

0 голосов
/ 30 апреля 2018

При условии, что вы правильно присвоили значение в форме после загрузки вашей модели, значения, которые вы присвоили, доступны, так что

  if ($model->load(Yii::$app->request->post())) {
     $model->cuerdas= $model->propia + $model->usofructo + $model->arrendada;
     ......

должно работать

...