在CakePHP 2中使用saveAssociated时手动设置ID

时间:2012-06-25 11:35:16

标签: cakephp

我有以下表格:

        echo $this->Form->input('Person.name');
        echo $this->Form->input('Person.phone');
        echo $this->Form->input('Person.email');
        echo $this->Form->input('Message.0.plainmsg');
        echo $this->Form->submit('Send Message');
        echo $this->Form->end();

Person有很多Message

我想设置控制器,以便第一次填写表单PersonMessage时会被插入,但第二次有人用SAME电子邮件地址填写表单{ {1}}仅更新,但新的Person与以前一样被插入。

以下是我的控制器到目前为止的样子:

Message

这一切都按预期工作:如果 if ($this->request->is('post')) { // Check to see if submitted email address is already // a record in Person model $person = $this->Person->findByEmail($this->request->data['Person']['email']); if ($person) { // Set the ID (save query will be UPDATE) $this->Person->id = $person['Person']['id']; } else { // Create a new record (save query will be INSERT) $this->Person->create(); } // Save the data (will run as UPDATE or INSERT // depending on above $this->Person->save($this->request->data); } 已经存在,那么Person.email已更新而不是INSERTED。这正是我想要的。

问题在于我无法弄清楚如何将Person用于所有这些。

我尝试将保存更改为Message,如this section of the cake manual中的最后一个示例所示,但结果是蛋糕尝试插入$this->Person->saveAssociated($this->request->data)而不是更新它。

我在这里尝试做的事情的目的和目的是允许用户发布无限数量的新Person并始终更新他们的Message记录及其当前的联系电话号码(这将是定期更改)。

1 个答案:

答案 0 :(得分:1)

您应该在消息模型中使用参数saveMessage$personId创建方法$messageText。 此方法的逻辑是使用所属用户保存新邮件。

在您$this->Person->id致电创建或更新人员后,人员ID将保留在Person::save()

在这种情况下,我不会使用任何Cake Magic。