在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
中
在这种情况下,我不会使用任何蛋糕魔法。是的,你说得对,这是解决这个问题的最好方法。我刚刚这样实现了它,它非常有意义。