#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.