CakePHP不保存BelongsTo键

时间:2013-12-10 18:11:21

标签: cakephp save belongs-to

我正在尝试保存属于其他模型的记录。然而,我得到一个错误,外键丢失了。 CakePHP文档显示了这种工作的例子,但我无法让它工作。

这是表格:

    echo $this->Form->create('Message', array('action'=>'add'));
                echo $this->Form->hidden('Ticket.id');
                echo $this->Form->input('Message.message');
                echo $this->Form->submit('Save Message');
                echo $this->Form->end();

以下是提交时返回给控制器的内容:

    Array(
        [Ticket] => Array
        (
            [id] => 2
        )

        [Message] => Array
        (
            [message] => Message text
        )

    )

这是我的消息模型:

    class Message extends AppModel {
            public $belongsTo = array('Ticket');
    }

这是我的票证模型:

    class Ticket extends AppModel {
        public $hasMany = 'Message';
    }

这是我的控制器逻辑:

        $this->Message->save($this->request->data);

以下是我收到的错误消息:

    Error: SQLSTATE[HY000]: General error: 1364 Field 'ticket_id' doesn't have a default value

CakePHP文件很清楚Cake会从Ticket数组中获取id。我可以让它工作的唯一方法是我手动将票证ID分配给消息数组。

    $this->request->data['Message']['ticket_id'] = $this->request->data['Ticket']['id']

我不应该这样做。魔术在哪里?我已经阅读了至少20个类似的帖子,但没有一个完全像这样(可能因为这是非常基本的,没有人有这个问题,因为它适用于他们)。

我正在使用版本2.4.2

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在这种情况下不要使用Model :: save(),原因是您还要保存关联数据,以便保存主模型的数据及其需要使用的关联模型{{ 3}}

您的控制器应该看起来像这样

  $this->Message->saveAssociated($this->request->data);