У меня есть форма, которая собирает данные из двух заданий «Объекты» и «Область действия». Данные о заданиях успешно добавляются в базу данных, но я не могу получить добавленную сущность области, которая также требует уникальный идентификатор, который был создан из записи заданий. Кстати, я использую доктрину.Symfony 2 persiting 2 сущности из формы с использованием идентификатора, сгенерированного из первого объекта
Вот jobsType:
class jobsType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('jobNumber', null, array('label' => 'Job Number','attr' => array('placeholder'=>'Code used for job')))
->add('description', null, array('label' => 'Job Description',))
;
$builder->add('scopes', new scopeType())
;
}
public function getName()
{
return 'jobs';
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Baker\TimeSlipBundle\Entity\Jobs',
));
}
}
Вот scopeType
class scopeType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('description', 'entity', array('label' => 'Scope', 'required' => false,
'class' => 'BakerTimeSlipBundle:Scope',
'query_builder' => function(EntityRepository $er){
return $er->createQueryBuilder('s')
->orderBy('s.description', 'asc');
},
'property' => 'description',
'multiple' => false,
'expanded' => false,
'empty_value' => false,
'attr' => array('class' => 'form-inline'),
'label_attr' => array('class' => 'required')
))
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Baker\TimeSlipBundle\Entity\Scope',
));
}
public function getName()
{
return 'scope';
}
}
Вот мой контроллер, я думаю, что проблема здесь в том, что я не передавая экземпляр сфера() в форме строитель. Который я не уверен, как это сделать. Объект правильно отображается.
class JobsController extends Controller
{
public function indexAction($limit, Request $request)
{
$jobs= new Jobs();
$scope = new Scope();
$fname=$limit;
$form = $this->createForm(new JobsType(),$jobs, array(
'method' => 'POST',
));
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($jobs);
$em->persist($scope);
$em->flush();
return $this->redirectToRoute('company',array ('limit' =>'Job Submitted Successfully'));
}
return $this->render(
'BakerTimeSlipBundle:Jobs:index.html.twig',
array('fname' => $fname,
'form' => $form->createView()
)
);
}
}
}
Любая помощь здесь была бы принята с благодарностью. Ниже перечислены сообщения об ошибке при попытке войти в сферу:
Исключение произошло во время выполнения '(??,) INSERT INTO Scope (описание, jobsId, jobsid) VALUES' с Params [нуль, NULL, NULL]: SQLSTATE [42000]: ошибка синтаксиса или нарушение прав доступа: 1110 Колонка «jobsId» указан дважды
Конечно, не связанные, но вы должны иметь вашу форму обработки запроса только 'если ($ request-> isMethod ('POST')) {}'. Кроме того, вы должны получить '$ jobs', выполнив' $ jobs = $ form-> getData(); '. – D4V1D
спасибо за совет, я решил позволить доктрине обрабатывать зависимости, которые вы должны использовать $ this-> getDoctrine() -> getManager(); – user3248331