Symfony2 EntityType字段持久化
我有实体:Symfony2 EntityType字段持久化,symfony,doctrine-orm,Symfony,Doctrine Orm,我有实体:AdWCType和AdWallType。这些实体包含静态数据,如目录 AdWallType index title ----- ----- 1 Brick 2 Plate $builder->add('wallType', EntityType::class, array( 'class' => 'AdBundle:AdWallType', 'choice_label' => '
AdWCType
和AdWallType
。这些实体包含静态数据,如目录
AdWallType
index title
----- -----
1 Brick
2 Plate
$builder->add('wallType', EntityType::class, array(
'class' => 'AdBundle:AdWallType',
'choice_label' => 'title',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('wt')
->where('wt.visible = :visible')
->setParameter('visible', true)
->orderBy('wt.weight', 'ASC')
->setCacheable(true);
}
))
->add('wcType', EntityType::class, array(
'class' => 'AdBundle:AdWCType',
'choice_label' => 'title',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('wc')
->where('wc.visible = :visible')
->setParameter('visible', true)
->orderBy('wc.weight', 'ASC')
->setCacheable(true);
}
))
实体Ad
包含列wallType
和wcType
AdType
index title
----- -----
1 Brick
2 Plate
$builder->add('wallType', EntityType::class, array(
'class' => 'AdBundle:AdWallType',
'choice_label' => 'title',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('wt')
->where('wt.visible = :visible')
->setParameter('visible', true)
->orderBy('wt.weight', 'ASC')
->setCacheable(true);
}
))
->add('wcType', EntityType::class, array(
'class' => 'AdBundle:AdWCType',
'choice_label' => 'title',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('wc')
->where('wc.visible = :visible')
->setParameter('visible', true)
->orderBy('wc.weight', 'ASC')
->setCacheable(true);
}
))
如何在表单提交时将选择的
wcType
和wallType
保存到实体Ad
?添加此字段的关联
/**
* @var ...
*
* @ORM\wallType(targetEntity="AdBundle:AdWallType")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="wallType", referencedColumnName="index")
* })
*/
private $wallType;
...
只需保存表单数据对象
$ad = new Ad();
$form = $this->createForm('%form_class%', $ad);
if ($request->isMethod('post')) {
$form->handleRequest($request);
if ($form->isValid()) {
$em->persist($ad);
$em->flush($ad);
}
}