2016-01-17 4 views
0

У меня есть две связанные модели в hasToMany отношение. Первый - Invoices, а второй - InvoiceItems. В процессе прототипа, я пытаюсь спрягать две модели через update зрения InvoicesController используя следующий код в actionUpdate из InvoicesController:Yii2 обновление двух связанных моделей не показывает данные второго

... 
use common\models\Invoices; 
use common\models\InvoicesSearch; 
use common\models\InvoiceItems; 
... 

public function actionUpdate($id) 
    { 
     $model = $this->findModel($id); 
     $invoiceItems = new InvoiceItems(); 

     if ($model->load(Yii::$app->request->post()) && $model->save()) { 
      $invoiceItems->invoice_id = $model->id; 
      if ($invoiceItems->load(Yii::$app->request->post()) && $invoiceItems->save()){ 
       return $this->redirect(['view', 'id' => $model->id]); 
      } 
      else{ 
       // return false; 
      } 
     } else { 
      $invoiceItems->invoice_id = $model->id; 
      return $this->render('update', [ 
       'model' => $model, 
       'invoiceItems' => $invoiceItems, 
      ]); 
     } 
    } 

Следующая в update зрения:

<div class="invoices-update"> 
    <h1><?= Html::encode($this->title) ?></h1> 
    <?= $this->render('_form', [ 
     'model' => $model, 
     'invoiceItems' => $invoiceItems, 
    ]) ?> 
</div> 

Наконец, следующее: _form вид:

<div class="invoices-form"> 
    <?php $form = ActiveForm::begin(); ?> 
    <?= $form->field($model, 'created')->textInput() ?> 
    <?= $form->field($model, 'type')->textInput(['maxlength' => true]) ?> 
    <hr /> 
    <?= $form->field($invoiceItems, 'item_id')->textInput();?> 
    <?= $form->field($invoiceItems, 'unit_id')->textInput();?> 
    <?= $form->field($invoiceItems, 'qty')->textInput();?>  

    <div class="form-group"> 
     <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 
    </div> 

    <?php ActiveForm::end(); ?> 

</div> 

В приведенном выше коде удалось сохранить данные в таблице invoice_items. Однако, форма представления обновления имеет пустые поля для модели InvoiceItems. i. item_id, unit_id и qty после сохранения сохраняются в форме обновления.

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

ответ

1

Кажется вид обновления пуст, потому что вы предоставляете и пустые InvoceItmes ..

$invoiceItems = new InvoiceItems(); 

вы предоставляете вид обновления в разделе еще и в этом разделе значение размещены не загружены

$model = $this->findModel($id); 
    $invoiceItems = new InvoiceItems(); 

    if ($model->load(Yii::$app->request->post()) && $model->save()) { 
     $invoiceItems->invoice_id = $model->id; 
     if ($invoiceItems->load(Yii::$app->request->post()) && $invoiceItems->save()){ 
      return $this->redirect(['view', 'id' => $model->id]); 
     } 
     else{ 
      // return false; 
     } 
    } else {//****** here the $invoceItems is empty (It has just been created) *** 
     //$invoiceItems->invoice_id = $model->id; 
     $invoceItems= findInvoceItmesModel($model->id); 
     return $this->render('update', [ 
      'model' => $model, 
      'invoiceItems' => $invoiceItems, 
     ]); 
    } 

для заселить данные для $ invoceItems вам нужны такие вещи, как

protected function findInvoiceItemsModel($id) 
{ 
    if (($model = InvociceItems::findOne($id)) !== null) { 
     return $model; 
    } else { 
     throw new NotFoundHttpException('The requested page does not exist.'); 
    } 
} 

Очевидно, что t его для одной модели .. вы должны сделать рефинансирование более чем одним ..

+0

Ну! Что мне нужно сделать, чтобы заполнить его данными? – SaidbakR

+0

Когда я пытаюсь '$ invoiceItems = $ model-> getInvoiceItems();' он возвращает ошибку: 'Вызов неизвестного метода: common \ models \ InvoiceItemsQuery :: formName()' – SaidbakR

+0

Вам нужна правильная findModel ... У меня есть обновить ответ ... – scaisEdge