Сохранение CakePHP не сохраняет ассоциированную модель

У меня две таблицы: Users и Clients

Вызов таблицы пользователей выглядит следующим образом:

  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' ) ); } 

Теперь в моем usercontroller у меня есть следующее действие сохранения:

  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')); } 

Когда я сохраняю новый объект, добавляется в таблицу users с правильным 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)) { } 

Aka используйте $this->User->Client->saveAll вместо $this->User->saveAll()

Все отлично работает.

Теперь это хорошо, но разве это так?

Используйте $this->User->saveAssociated($data) вместо $this->User->save($data)

Обновить

Просто установите данные для клиента без идентификатора поля, как показано ниже, чтобы сохранить данные при сохранении пользователя.

 $data = array( 'User' => array( 'username' => $this->request->data['User']['username'], 'password' => $this->request->data['User']['password'] ), 'Client' => array( 'field1' => 'field1value', 'field2' => 'field2value', 'field3' => 'field3value' ) ); 

Да, они оба одинаковы, только разница между ними заключается в том, что saveAssoicated используется, когда вам нужно одновременно сохранять связанные модели, тогда как saveAll является оболочкой saveAssociated,

Вы можете использовать saveAssociated

$ This-> User-> saveAssociated ($ данные)

а также saveAll ()

$ This-> User-> SaveAll ($ данные)

благодаря