我有两张表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'
)
);
}
现在在我的用户控制器中,我有以下保存操作:
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添加到users表中,但是没有任何内容添加到客户端表中。
谁能告诉我为什么会这样?
请注意,我已尝试将功能更改为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()
一切正常......
现在这很好但是假设是这样的吗?
答案 0 :(得分: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'
)
);
答案 1 :(得分:1)
是的,两者都是相同的,只是它们之间的区别在于,当您需要一次保存关联模型时使用saveAssoicated而saveAll是saveAssociated的包装,
您可以使用 saveAssociated
$这 - &GT;用户 - &GT; saveAssociated($数据)
以及 saveAll()
$这 - &GT;用户 - &GT;白水($数据)
由于