私は次のフォームを持っています:
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
初めてフォームに入力されて挿入されるようにコントローラーを設定したいのですPerson
がMessage
、2回目に誰かが同じ電子メールアドレスをフォームに入力すると、更新さ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
すでに存在する場合Person
は、INSERTED ではなく UPDATED になります。これはまさに私が欲しいものです。
Message
問題は、これらすべてに取り組む方法を理解できないことです。
Cake マニュアルのこのセクションの$this->Person->saveAssociated($this->request->data)
最後の例で示したように、保存を変更しようとしましたが、その結果、 Cakeは UPDATE ではなくINSERT を試みます。Person
ここで私がやろうとしていることのポイントと目的は、ユーザーが無制限に新しいものを投稿できるようにし、現在の連絡先番号 (定期的に変更されます) で記録Message
を常に更新できるようにすることです。Person