如何在symfony2学说中优化这个实体?

时间:2012-10-13 12:24:52

标签: php database symfony doctrine

我有一个实体(布局模板),它将包含多达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不熟悉我真的不知道如何去做。

1 个答案:

答案 0 :(得分:1)

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

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