我想要达到的目的是立即注册User
和Firm
。所以我需要插入3个表:users
,firms
和firms_users
。 CakePHP应该自动执行此操作,因为我在模型中设置了$hasAndBelongsToMany
关联。但是在注册期间,只有users
表被写入。我错过了什么吗?
注册表
<div class="users form">
<?php echo $this->Form->create('User'); ?>
<fieldset>
<legend><?php echo __('Add User'); ?></legend>
<?php
echo $this->Form->input('User.email', array('type' => 'email')); //standard HTML5 email validation
echo $this->Form->input('User.password');
echo $this->Form->input('Firm.0.name');
echo $this->Form->input('Firm.0.zipcode');
?>
</fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
</div>
User
模型的相关部分
public $hasAndBelongsToMany = array(
'Firm' => array(
'className' => 'Firm',
'joinTable' => 'firms_users',
'foreignKey' => 'user_id',
'associationForeignKey' => 'firm_id',
'unique' => 'keepExisting',
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
),
以及Firm
模型的相关部分
class Firm extends AppModel {
public $hasAndBelongsToMany = array('User'=>array('className'=>'User'));
最后是UsersController / show_reg_form动作
public function show_reg_form(){
if ($this->request->is('post')) {
$this->loadModel('Firm');
$this->User->create();
$this->Firm->create();
if ($this->User->saveAll($this->request->data)) {
$this->Session->setFlash(__('The user has been saved'));
return $this->redirect(array('action' => 'loggedin','loggedin'));
}
$this->Session->setFlash(
__('The user could not be saved. Please, try again.')
);
}
}
答案 0 :(得分:1)
应该是
echo $this->Form->input('Firm.name');
echo $this->Form->input('Firm.zipcode');
答案 1 :(得分:1)
为了使用hasAndBelongsToMany关联保存,你应该有这样的数组来保存记录
Array
(
[User] => Array
(
[field_1] => 1
[field_2] => 2
[field_3] => 3
[field_4] => 4
)
[Firm] => Array
(
[0] => 5
[1] => 8
[2] => 4
)
)
其中5,8,4是公司表的记录ID
我认为这不是你要找的情况, 我建议你仔细阅读
hasMany
关联,如果用户有多家公司public $hasMany = array('Firm');
hasOne
关联,如果用户只有一家公司public $hasOne = array('Firm');
以便在创建用户时添加公司
答案 2 :(得分:1)
您只能使用一个saveAll来保存所有三个表中的数据。 首先,您需要保存公司记录,然后将新生成的公司ID分配为$ this-&gt;数据中的隐藏字段,并使用saveAll保存用户模型数据。然后数据将进入名为firm_users的第三个表中。 您可以查看以下链接以获取更多信息
<强> http://book.cakephp.org/2.0/en/models/saving-your-data.html#saving-related-model-data-habtm 强>
答案 3 :(得分:1)
我认为此代码可以正常使用
public function show_reg_form(){
if ($this->request->is('post')) {
$this->User->create();
if ($this->User->save($this->request->data)) {
$this->Firm->create();
if($this->Firm->save($this->request->data))
$this->Session->setFlash(__('The user has been saved'));
return $this->redirect(array('action' => 'loggedin','loggedin'));
}
else{
$this->Session->setFlash(
__('The user could not be saved. Please, try again.')
);
}
}
}