我试图找到一种方法来使用symfony表单来保存具有预先存在的子节点的新根实体。
根据它们目前的情况,它会尝试持久保存新的JobName,而不是承认它存在。
我传递一个新的Job实体加上所需更新的数组数据 jobName已存在,其id为1,并且在DB中命名为“existing name”,我希望它传递对它的引用而不是持久保存新的。
$data = ['jobName' => ['id' => 1, 'name' => 'existing name']]; // The job array object
$form = $this->formFactory->create(new JobType(), $jobEntity); // Pass the array to form
$form->submit($data); // Bind data
我可以在表单中设置一个事件监听器,只要传递了一个id为NOT NULL的实体,就可以从实体管理器中获取引用,但我确实认为这可能是开箱即用的......
切换JobType buildForm:
->add('jobName', EntityType::class, [
'class' => 'AppBundle:JobName',
'choice_label' => 'name',
])
然后允许分配现有名称的数组:
$data = ['jobName' => 1];
但现在我不确定如何创建一个新的jobName(使用级联)?
我的表是:
Job [id, job_name_id]
JobName [id, name]
工作表格:
class JobType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('jobName', new JobNameType())
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'AppBundle\Entity\Job',
'csrf_protection' => false,
]);
}
}
JobName表格:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('id')
->add('name')
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'AppBundle\Entity\JobName',
]);
}
}