我有一个实体(布局模板),它将包含多达10个可配置的侧边栏,这些侧边栏都是同一个实体类型的实例。
我现在的解决方案就是把它(如下)
/**
* @var object BizTV\ContainerManagementBundle\Entity\Container
*
* @ORM\ManyToOne(targetEntity="BizTV\ContainerManagementBundle\Entity\Container")
* @ORM\JoinColumn(name="sidebar1", referencedColumnName="id", nullable=true)
*/
protected $sidebar1;
/**
* @var object BizTV\ContainerManagementBundle\Entity\Container
*
* @ORM\ManyToOne(targetEntity="BizTV\ContainerManagementBundle\Entity\Container")
* @ORM\JoinColumn(name="sidebar2", referencedColumnName="id", nullable=true)
*/
protected $sidebar2;
但我意识到最好的方法是将它们存储在一个对象数组中(这也不会限制我将来使用10个对象)。如果有人能在这里指出我正确的方向。最难的事情是我选择这10个实体的形式。我上面的方法是对十个属性中的每个属性进行简单的下拉。
->add('sidebar1', 'entity', array(
'label' => 'Choose sidebar ',
'empty_value' => 'Not active',
'class' => 'BizTVContainerManagementBundle:Container',
'property' => 'select_label',
'query_builder' => function(EntityRepository $er) use ($company) {
return $er->createQueryBuilder('u')
->where('u.company = :company')
->setParameters( array('company' => $company) )
->orderBy('u.name', 'ASC');
},
))
->add('sidebar2', 'entity', array(
'label' => 'Choose sidebar ',
'empty_value' => 'Not active',
'class' => 'BizTVContainerManagementBundle:Container',
'property' => 'select_label',
'query_builder' => function(EntityRepository $er) use ($company) {
return $er->createQueryBuilder('u')
->where('u.company = :company')
->setParameters( array('company' => $company) )
->orderBy('u.name', 'ASC');
},
))
同样,我意识到这远非最好的方式,但是对Symfony2不熟悉我真的不知道如何去做。
答案 0 :(得分:1)
使用Many to Many
关系,对于表单,请使用“集合”字段类型:
http://symfony.com/doc/master/cookbook/form/form_collections.html