如何在Symfony中从一个表单更新2个表?

时间:2011-05-11 08:44:37

标签: symfony1

我有一个表单,我在表单类中添加了一个额外的sfWidgetFormTextarea小部件。

我希望通过更新表格的数据库来保存表单,然后获取sfWidgetFormTextarea的,并将其作为新行插入到另一个表中,同时保存textarea值和为另一个表中保存的数据创建的ID号。

这听起来令人困惑,所以如果我把它放在上下文中它就不那么容易了。我的表格是获取患者血液检查的详细信息。如果用户想要测试,用户还可以添加任何评论。一份血液测试记录可以有多个评论。出于这个原因,我想将注释保存在另一个具有测试ID的表中,以便可以检索一个测试的所有注释。

我已经意识到这个额外的sfWidgetFormTextarea将破坏保存功能,因为它将保存它并且不会是名为comment的表中的字段,因此它不知道将此textarea值保存到哪里。我应该以某种方式从$ request中删除注释值并将其插入到注释表中吗?我还需要知道它与它相关的id的想法,直到保存函数才是锥形。

请帮忙,我的头疼!!!

1 个答案:

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

我希望这会有所帮助,如果你顺利的话,请告诉我......