Cakephp 保存相关模型数据(3个级别)

Cakephp 保存相关模型数据(3个级别),cakephp,Cakephp,真的很难将模型信息保存到较低的级别 首先,我有一个expenseClaim–有很多费用(属于expenseClaim的费用) 费用HABTM费用代码。(比如火车费、汽油费等) 因此,我有一个添加新费用页面——(ExpenseClaimsController/Add) 这看起来有点像电子表格,它允许您输入多行(每行都是费用)。每行都有一个下拉列表,用于选择费用代码。问题是expenseCode没有写入联接表(expenses\u expense\u codes) 如果我通过未使用和即将删除的exp

真的很难将模型信息保存到较低的级别

首先,我有一个expenseClaim–有很多费用(属于expenseClaim的费用)

费用HABTM费用代码。(比如火车费、汽油费等)

因此,我有一个添加新费用页面——(ExpenseClaimsController/Add)

这看起来有点像电子表格,它允许您输入多行(每行都是费用)。每行都有一个下拉列表,用于选择费用代码。问题是expenseCode没有写入联接表(expenses\u expense\u 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);

}

谁能给我指出正确的方向吗?提前感谢。

为了追踪问题,我不得不将ExpenseClaim中的字段重命名为add to

$this->Form->input('Expense.0.ExpenseCode.ExpenseCode');
这就解决了问题


希望这能帮助别人。

使用2.0+?尝试设置
saveAll($this->request->data,array('deep'=>true))
是的,使用2.2,尝试了您的建议,但没有成功。expensecode不会写入联接表。还有其他想法吗?