0

私は次のフォームを持っています:

        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

初めてフォームに入力されて挿入されるようにコントローラーを設定したいのですPersonMessage、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

4

1 に答える 1

1

パラメーターとsaveMessageを使用してメッセージ モデルにメソッドを作成する必要があります。このメソッドのロジックは、所属するユーザーで新しいメッセージを保存することです。$personId$messageText

個人 ID は、個人を作成または更新したかどうかに関係なく、通話$this->Person->id後に保持されます。Person::save()

この場合、Cake Magic は使用しません。

于 2012-06-25T11:43:59.153 に答える