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

在CakePHP 2中使用saveAssociated时手动设置ID,cakephp,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 $thi

我有以下表格:

        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();
有许多
信息

我想设置控制器,以便在第一次填写表单时插入
个人
消息
,但在第二次有人使用相同的电子邮件地址填写表单时,
个人
只会更新,但会像以前一样插入新的
消息

以下是迄今为止我的控制器的外观:

    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
已经存在,则
Person
将更新,而不是插入。这正是我想要的

问题是我不知道如何将
Message
应用到所有这些中

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


我在这里尝试做的重点和目的是允许用户发布无限数量的新
消息
,并始终让他们的
人员
记录更新为他们当前的联系人号码(将定期更改).

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

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


在这种情况下,我不会使用任何蛋糕魔法。

是的,你说得对,这是解决这个问题的最好方法。我刚刚这样实现了它,它非常有意义。