【发布时间】:2014-05-15 07:08:57
【问题描述】:
我使用的是 CakePHP 2.3.6。我的项目中有一些模型,它们是关联的,并且我明确定义了关联。现在,我有一个编辑表单,在其中检索所有模型数据,并尝试在相应模型中编辑这些数据。但是,没有发生编辑,而是在关联的表中创建了新行。
这是我在模型之间的关联:
在模型User.php:
public $hasMany=array('Education'=>array(
'className'=>'Education
'foreignKey'=>'user_id'
),
'Experience'=>array(
'className'=>'Experience',
'foreignKey'=>'user_id'
),
'Employment'=>array(
'className'=>'Employment',
'foreignKey'=>'user_id'
),
'ProfessionalQualification'=>array(
'className'=>'ProfessionalQualification',
'foreignKey'=>'user_id'
)
)
在模型Education.php:
public $belongsTo=array('User'=>array(
'className'=>'User',
'foreignKey'=>'user_id'
)
)
在模型Experience.php
public $belongsTo=array('User'=>array(
'className'=>'User',
'foreignKey'=>'user_id'
)
)
在模型Employment.php:
public $belongsTo=array('User'=>array(
'className'=>'User',
'foreignKey'=>'user_id'
)
)
在模型ProfessionalQualification.php:
public $belongsTo=array('User'=>array(
'className'=>'User',
'foreignKey'=>'user_id'
)
)
现在,在编辑表单中 (View/Users/edit.ctp):
echo $this->Form->create('User');
echo $this->Form->input('User.name');
echo $this->Form->input('User.username');
echo $this->Form->input('User.password');
echo $this->Form->input('User.address');
echo $this->Form->input('User.phone');
echo $this->Form->input('Education.0.degree');
echo $this->Form->input('Education.0.passing_year');
echo $this->Form->input('Experience.0.title');
echo $this->Form->input('Experience.0.description');
echo $this->Form->input('Employment.0.company');
echo $this->Form->input('Employment.0.description');
echo $this->Form->input('ProfessionalQualification.0.certificate');
echo $this->Form->input('ProfessionalQualification.0.description');
echo $this->Form->submit('Save');
echo $this->Form->end();
在UsersController.php 控制器中:
public function edit(){
$this->set('title_for_layout','Edit CV');
if(!AuthComponent::user('id'))
throw new NotFoundException(__('Invalid User'));
$user=$this->User->findById(AuthComponent::user('id'));
if(!$user)
throw new NotFoundException(__('Invalid User'));
if($this->request->is('post') || $this->request->is('put')){
if(!$this->User->saveAll($this->request->data)){
$this->Session->setFlash('Sorry, your info could not be saved. Please, try again.');
$this->redirect(array('action'=>'edit'));
}
}
if(!$this->request->data)
$this->request->data=$user;
}
在这里,我正在 User 模型上尝试 saveAll() 功能。我还尝试使用save() 和saveAssociated() 函数,但结果相同。它不会改变表中的对应行,而是在所有表中创建一个新行,接受users表,该表成功获取新值并更新值。
我该怎么办?请帮帮我。
谢谢
【问题讨论】:
-
你试过用
updateAll代替saveAll吗? -
我应该如何使用它,像这样: $this->User->updateAll($this->request->data) ?它也不起作用,相反,它给出了一个错误:数组到字符串转换
-
在调用
$this->User->saveAll($this->request->data)之前使用用户ID初始化$this->User->id -
是的,我做到了,但结果相同。谢谢@Console
标签: cakephp model-associations updatemodel