Как обновить 2 таблицы из одной формы в Symfony?

#symfony1

#symfony1

Вопрос:

У меня есть форма, в которую я добавил дополнительный виджет sfWidgetFormTextarea в классе form.

Я хочу сохранить форму, обновив базу данных для полей, соответствующих форме, но затем получить значение для sfWidgetFormTextarea и вставить это в другую таблицу в виде новой строки, сохранив как значение textarea, так и идентификационный номер, созданный для сохраненных данных в другой таблице.

Это звучит запутанно, поэтому, возможно, если я помещу это в контекст, это будет не так. Моя форма получает подробную информацию об анализе крови пациента. Пользователь также может добавлять любые комментарии к тесту, если они хотят. Одна запись анализа крови может содержать несколько комментариев. По этой причине я хочу сохранить комментарий в другой таблице с идентификатором теста, чтобы можно было получить все комментарии для одного теста.

Я понял, что эта дополнительная sfWidgetFormTextarea приведет к нарушению функции сохранения, потому что она перейдет к ее сохранению, и в таблице не будет поля с именем comment, поэтому она не будет знать, куда сохранить это значение textarea. Должен ли я каким-то образом удалить значение комментария из $ request и вставить его в таблицу комментариев? Мне также нужно было бы знать идентификатор tets, к которому он относится, хотя это не cone до функции сохранения.

Пожалуйста, помогите, у меня болит голова!!

Ответ №1:

Вы можете сохранить форму вручную, пожалуйста, проверьте фрагмент кода ниже

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

Я надеюсь, это поможет, дайте мне знать, если у вас все получится…

Комментарии:

1. Спасибо за это. Я пытаюсь деконструировать это, прежде чем внедрять. Что такое Table1peer? Я погуглил это, и там нет объяснений.

2. @Nicola, я знаю, что это устарело, но Table1 в Table1Peer является таблицей примеров и связана с [example]Peer классом. Я полагаю, что ответ ориентирован на Propel.