0

hasToMany 関係に 2 つの関連モデルがあります。1 つ目はInvoicesで、2 つ目はInvoiceItemsです。プロトタイプ プロセスとして、 of で次のコードを使用して、 のupdateビューを通じて 2 つのモデルを結合しようとしています。InvoicesControlleractionUpdateInvoicesController

...
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モデル用の空のフィールドがあります。つまりitem_id、保存後の更新フォームでは空ですunit_idqty

注意:これは最初のコードです。つまり、請求書に多くのアイテムを追加できるように後で作業しますが、今は請求書に関連する 1 つのアイテムを作成しようとしています。

4

1 に答える 1