Symfony表单,使用现有子项创建实体

时间:2016-03-27 19:32:57

标签: php forms symfony doctrine-orm

问题

我试图找到一种方法来使用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',
            ]);
    }
}

0 个答案:

没有答案