我有一个表单,我在表单类中添加了一个额外的sfWidgetFormTextarea小部件。
我希望通过更新表格的数据库来保存表单,然后获取sfWidgetFormTextarea的值,并将其作为新行插入到另一个表中,同时保存textarea值和为另一个表中保存的数据创建的ID号。
这听起来令人困惑,所以如果我把它放在上下文中它就不那么容易了。我的表格是获取患者血液检查的详细信息。如果用户想要测试,用户还可以添加任何评论。一份血液测试记录可以有多个评论。出于这个原因,我想将注释保存在另一个具有测试ID的表中,以便可以检索一个测试的所有注释。
我已经意识到这个额外的sfWidgetFormTextarea将破坏保存功能,因为它将保存它并且不会是名为comment的表中的字段,因此它不知道将此textarea值保存到哪里。我应该以某种方式从$ request中删除注释值并将其插入到注释表中吗?我还需要知道它与它相关的id的想法,直到保存函数才是锥形。
请帮忙,我的头疼!!!
答案 0 :(得分:0)
您可以手动保存表单,请查看下面的代码段
$this->form->bind($request->getParameter('formname'));
if ($this->form->isValid()) {
$arrValues = $this->form->getValues();
//get dataobject base on criteria...
$objTable1 = Table1Peer::getByField($arrValues['my_field']);
if(is_object($objTable1)){
$objTable1->setField($arrValues['my_field']);
//update
if($objTable1->save()){
$objTable2 = new Table2();
$objTable2->setPostId($objTable1->getId());
$objTable2->setComment($arrValues['my_comment']);
if($objTable2->save()){
$this->redirect('@action_name');
$this->getUser()->setFlash('success', 'comment saved');
}else{
$this->getUser()->setFlash('error', 'failed to save form, contact admin');
}
}else{
$this->getUser()->setFlash('error', 'failed to save form, contact admin');
}
}
我希望这会有所帮助,如果你顺利的话,请告诉我......