1

ユーザーモデルがあります。

次のようなフォームを含むレジスタビューがあります。

echo $this->Form->create('User',array(NULL,NULL,'class' => 'signinform'));
echo $this->Form->input('first_name');
...
echo $this->Form->end('Create Account');

フォームを送信すると、次のように保存されます。

$this->User->save($this->data)

これは機能します。


データベースに、外部キーでaddressesあるフィールドで呼び出されるテーブルを追加しました。user_idusers.id

ユーザーモデルを追加しました。

var $hasMany = 'Address';

次のようなフィールドを登録フォームに追加します。

echo $this->Form->input('Address.city');

これにより、addressesテーブルに新しいエントリが作成され、新しいユーザーに関連付けられると期待していました。そうではなく、新しいユーザーを作成しますが、アドレステーブルには何も入れません。

保存機能をからsaveに変更してみましたsaveAll

$this->User->saveAll($this->data)

今は何も保存されません。

私は何が間違っているのですか?

4

2 に答える 2

4

CakePHPの保存には、関係全体でそのように保存するためにもう少し作業が必要です。これがドキュメントの例です。

<?php
function add() {
    if (!empty($this->data)) {
        // We can save the User data:
        // it should be in $this->data['User']

        $user = $this->User->save($this->data);

        // If the user was saved, Now we add this information to the data
        // and save the Profile.

        if (!empty($user)) {
            // The ID of the newly created user has been set
            // as $this->User->id.
            $this->data['Profile']['user_id'] = $this->User->id;

            // Because our User hasOne Profile, we can access
            // the Profile model through the User model:
            $this->User->Profile->save($this->data);
        }
    }
}
?>

複数のデータベースを変更する場合は、トランザクションを使用して、それらを一緒に成功または失敗させることを検討する必要があります。トランザクションを使用したくない場合は、リクエストが途中で失敗したときにユーザーに何を表示するかを検討してください。また、データベースがどのような状態のままになるか、およびどのように回復できるかについても検討してください。

于 2011-02-16T21:13:12.270 に答える
1

これをアドレスモデルに入れる必要があるかもしれません:

var $belongsTo = 'User';

于 2011-02-16T21:40:30.220 に答える