我有一个联系表,要求用户提供姓名、电子邮件地址和消息。
姓名和电子邮件地址存储在
Person
中,消息存储在 Message
中
Message
属于Person
所以当我这样做时:
$this->Person->Message->saveAll($this->request->data)
..姓名和电子邮件地址已插入到
people
表中,消息已插入到 messages
表中,并带有 person_id
。
到目前为止,一切都很好。
现在,我想要做的是,如果用户(通过电子邮件地址识别)返回并提交第二条消息,则提供一种方法来更新
Person
和插入 Message
。
我发现执行此操作的唯一方法是在
Person
上运行 find 以查看是否有包含表单中提交的电子邮件地址的记录。如果有,我使用 array_merge
将其添加到 $this->request->data['Person']
。这可行,但这感觉有点像黑客的做事方式。
有更直接的方法吗?
如果使用 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;
}
找到您的人员后,您只需设置消息的 person_id 并运行保存即可,这样您就不必再次保存该人员。