У меня есть 2 формы: $patientForm
и $investigationForm
.
Они оба объединены в одно представление, поэтому пользователь заполняет поля, и 2 записи создаются в таблице пациента и таблице исследования.Таблица расследований имеет внешний ключ - имя пациента.Таким образом, у одного пациента может быть много исследований.
Так что мне, очевидно, нужен идентификатор пациента, чтобы добавить его в протокол исследования в качестве внешнего ключа.Однако идентификатор пациента не создается до тех пор, пока форма пациента не будет сохранена.
Итак, я разработал следующую функцию:
protected function processPatientInvestigation(sfWebRequest $request, sfForm $investigationForm, sfForm $patientForm)
{
$patientForm->bind($request->getParameter($patientForm->getName()), $request->getFiles($patientForm->getName()));
if ($patientForm->isValid() && $investigationForm->isValid() ) {
$patientForm->save();
$values = $request->getParameter($investigationForm->getName());
$values['patient_id'] = $patientForm->getObject()->getId();
$investigationForm->bind($values, $request->getFiles($investigationForm->getName()));
$investigationForm->save();
}
Оператор if всегда терпит неудачу, поскольку $investigationForm
недействителен, пока я не передам его полю формы значение patient_id
.Так что это значение пусто на данный момент.Однако, если я просто взял isValid()
форму для проверки $investigation
и отложил ее позже после сохранения $patientForm
.Это означает, что если он не прошел проверку и пользователь пропустил поле, когда он не нажимает кнопку «Отправить» снова, вся функция снова запустится, что означает, что у нас будут дубликаты записей о пациентах.
Так что я думаю, чтоответ заключается в том, что делает поле Patient_id не проверенным, поэтому оно может быть пустым и все же передавать функцию isValid()
.
Пожалуйста, дайте мне знать, если это не ясно.Надеюсь, вы можете посоветовать!