从Symfony2中的表单中检索另一个实体

时间:2014-01-25 15:21:50

标签: php symfony doctrine-orm

我有一个表单,用于填充Symfony2中的Project Doctrine实体。

我们说这些字段是:

Name: ______________
Customer: ____________

Customer是另一个Doctrine实体。

我的问题是,我无法设法检索客户实体。我试图根据ID(例如,该字段成为客户ID)检索它,然后在prePersist事件监听器中使用检索到的实体设置$project->customer,但这对我来说似乎有点过分了。

我想做的就是以下几点:

  1. 显示包含可用Customer实体的列表框作为客户字段(Project表格)
  2. 在数据库中,使用所选的客户ID
  3. 填写customerId字段(在Project表中)

    我知道它必须非常简单,我需要3分钟才能使用PHP / MySQL和一些外键设置它,但我只是不知道使用Symfony2 /做到这一点的最佳方法学说(意思是尊重标准,不看意大利面)。

    所以,我的问题:

    1. 我应该在MyBundle\Form\ProjectType->buildForm()函数中声明什么?
    2. 我应该如何检索所选的Customer实体以及我应该在目录结构中执行此操作(controller,entity,prePersist event listener ...)?
    3. 感谢。

1 个答案:

答案 0 :(得分:0)

刚刚找到答案。这很简单:)

在MyBundle / Form / ProjectType.php中:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('name',    'text')
        ->add('customer', 'entity', array(
            'class' => 'Me\Bundle\MyBundle\Entity\Customer',
            'property' => 'name'));
}

然后在Project.orm.yml(是的,我喜欢Yaml):

manyToOne:
    customer:
        targetEntity: Customer
        joinColumn:
            name: customerId
            referencedColumnName: id
            nullable: false

最后,在Customer.orm.yml:

oneToMany:
    projects:
      targetEntity: Project
      mappedBy: customer

就是这样! Symfony2负责这一切。简单明了。