在保存CakePHP之前,将ID插入$ this-> request->数据数组

时间:2012-06-22 06:50:39

标签: cakephp

我有一个联系表格,询问用户的姓名,电子邮件地址和信息。

姓名和电子邮件地址存储在Person中,邮件存储在Message

Message属于Person所以当我这样做时:

$this->Person->Message->saveAll($this->request->data)

.. people表中的名称和电子邮件地址已被INSERTED,并且messages表格中的邮件已被person_id封存。

到目前为止,非常好。

现在,我想要做的是为Person提供一种更新方式,如果用户(由他们的电子邮件地址标识)返回并提交第二条消息,则Message将被插入。Person

我发现这样做的唯一方法是在array_merge上运行查找以查看是否有包含表单中提交的电子邮件地址的记录。如果有,我会使用$this->request->data['Person']将其添加到{{1}}。这很有效,但这感觉就像是一种做事的hackish方式。

有没有更简单的方法呢?

2 个答案:

答案 0 :(得分:1)

如果使用Person Model的beforeSave()方法。

# App/Model/Person.php

function beforeSave()
{
   if(empty($this->data['Person']['id'])
   {
     $person = $this->findByEmail($this->data['Person']['email']);

     if(!empty($person))
     {
         $this->data['Person']['id'] = $person['Person']['id'];
     }
   }
   return true;
}

答案 1 :(得分:0)

找到你的人后,你可以设置你的消息的person_id,然后只需保存就可以了,所以你不必再保存这个人。