0

モデル情報を数レベル下に保存するのに本当に苦労しています。

まず、私はexpenseClaimを持っています-それは多くの費用を持っています(費用はexpenseClaimに属します)。

経費HABTMExpenseCode。(これらは、電車の運賃、ガソリン代などです)。

だから、私は新しい経費の追加ページを持っています–(ExpenseClaimsController / add)。

これはスプレッドシートに少し似ており、複数の行を入力できます(各行は費用がかかります)。各行には、expenseCodeを選択するためのドロップダウンがあります。問題は、expenseCodeが結合テーブル(expenses_expense_codes)に書き込まれないことです。

未使用で間もなく削除されるexpenseController/addを介して単一の経費を追加すると、正常に機能するため、関連するモデル、モデルを保存することが問題になります。ExpenseCodeはexpenseClaimモデルに直接関連していないため、ExpenseClaimsController / addを実行しても保存されないため、これを行う方法を理解できません。

それが理にかなっていることを願っています…。

ExpenseClaimsControllerコードは次のとおりです。

public function add() {
    if ($this->request->is('post')) {

        //debug($this->request->data);

        // Test
        $this->loadModel('ExpenseCode');

        // Create the claim and the expenses
        $this->ExpenseClaim->create();
        $this->ExpenseClaim->Expense->create();

        // Set the user ID
        $this->request->data['ExpenseClaim']['user_id'] = $this->Auth->user('id');

        // Set the claim status based on which submit btn was pressed
        if ($this->request->data['submit'] == 'Submit') {

            $this->request->data['ExpenseClaim']['claim_status_id'] = '2';


        } else {
            $this->request->data['ExpenseClaim']['claim_status_id'] = '1';
        }

        // Set the claim status
        $now = date('Y-m-d H:i:s');
        $this->request->data['ExpenseClaim']['date_submitted'] = $now;

        // Save both expenses and the expense claim         
        if ($this->ExpenseClaim->saveAll($this->request->data)) {
            $this->Session->setFlash('The expense claim has been saved', 'flash_success');
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash('The expense claim could not be saved. Please, try again.', 'flash_failure');
        }
    }

    $users = $this->ExpenseClaim->User->find('list');
    $claimStatuses = $this->ExpenseClaim->ClaimStatus->find('list');
    $expenseCodes = $this->ExpenseClaim->Expense->ExpenseCode->find('list');
    $mileageRate = $this->Auth->user('mileage_rate');
    $this->set(compact('users', 'claimStatuses', 'expenseCodes', 'mileageRate'));

    // Set errors for top of page
    $this->set('errors', $this->ExpenseClaim->validationErrors);

}

誰かが私を正しい方向に向けることができますか?前もって感謝します。

4

1 に答える 1

0

問題を追跡することができたので、ExpenseClaim のフィールドの名前を次のように変更する必要がありました。

$this->Form->input('Expense.0.ExpenseCode.ExpenseCode');

これで問題は解決しました。

うまくいけば、これは誰かを助けるでしょう。

于 2012-08-22T11:22:42.180 に答える