0

我有一个实体(布局模板),它最多有 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 的新手,我真的不知道如何去做。

4

1 回答 1

1

使用Many to Many关系,对于表单,使用“集合”字段类型:

http://symfony.com/doc/master/cookbook/form/form_collections.html

于 2012-10-13T13:08:36.420 回答