0

私は2つのテーブルを持っていてUsersClients

ユーザー テーブルの構造は次のようになります。

  id (primary)
  username(varchar)
password, client_id

これで、クライアント テーブルは次のようになります。

user_id, client_id(primary), is_new

これらの関係は次のように定義されます。

    class User extends AppModel
{
    public $name = 'User';
    public $hasOne = array(
        'Client' =>array(
            'className' => 'Client',
            'dependent' => true,
            'foreignKey' => 'client_id'
        )
    );
}


    class Client extends AppModel
{
    public $name = 'Client';
    public $primaryKey = 'client_id';
    public $belongsTo = array(
        'User' => array(
            'className' => 'User',
            'dependent' => true,
            'foreignKey' => 'user_id'
        )
    );
}

現在、ユーザーコントローラーには次の保存アクションがあります。

      if ($this->request->is('post')) {
        $data = null;
        $client_id = null;
        if ($this->request->data['User']['group_id'] == 1) {
            $client_id = 2;

        } elseif ($this->request->data['User']['group_id'] == 2) {
            $client_id = $this->request->data['User']['Client id'];
        }
        $data = array('User' => array(
            'username' => $this->request->data['User']['username'],
            'password' => $this->request->data['User']['password'],
            'group_id' => $this->request->data['User']['group_id'],
            'client_id' => $client_id),
        'Client' => array('client_id' => $client_id)
        );

        if ($this->User->save($data)) {
            $this->Session->setFlash(__('The user has been saved'));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The user could not be saved. Please, try again.'));
        }
    }
    $groups = $this->User->Group->find('list');
    $this->set(compact('groups'));
}

保存すると、正しい client_id を持つユーザー テーブルに新しいエンティティが追加されますが、クライアント テーブルには何も追加されません。

なぜこれが起こっているのか誰にも教えてもらえますか?

関数を次のように変更しようとしたことに注意してくださいsaveAll();

アップデート

私が次のことをした場合:

        $data = array( 'User' => array( 'username' => $this->request->data['User']['username'],
                'password' => $this->request->data['User']['password'],
                'group_id' => $this->request->data['User']['group_id'],
                'client_id' => $client_id ),
                'Client' => array('client_id' => $client_id) );
            if ($this->User->Client->saveAll($data)) {
}

別名使用$this->User->Client->saveAllの代わりに$this->User->saveAll()

すべてが正常に動作します..

今はこれでいいのですが、そういうことでしょうか?

4

2 に答える 2

1

$this->User->saveAssociated($data)の代わりに使用$this->User->save($data)

アップデート

ユーザーの保存中にデータを保存するには、以下のようにフィールドIDなしでクライアントのデータを設定するだけです。

$data = array(
    'User' => array(
        'username' => $this->request->data['User']['username'], 
        'password' => $this->request->data['User']['password']
    ), 
    'Client' => array(
        'field1' => 'field1value',
        'field2' => 'field2value',
        'field3' => 'field3value'
    )
);
于 2013-09-19T09:30:40.693 に答える
1

はい、これらは両方とも同じです。それらの違いは、関連付けられたモデルを一度に保存する必要がある場合に saveAssoicated が使用されるのに対し、saveAll は saveAssociated のラッパーです。

saveAssociatedを使用できます

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

saveAll()と同様に

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

ありがとう

于 2013-09-19T10:06:03.270 に答える