2014-01-25 71 views
0

我有一個填充Symfony2中的Project Doctrine實體的表單。從Symfony2中的表單中檢索另一個實體

假設的領域是:

Name: ______________ 
Customer: ____________ 

哪裏Customer是另一種學說實體。

我的問題是,我無法設法檢索客戶實體。我嘗試根據實例的ID(字段變成Customer ID)來檢索它,然後在prePersist事件偵聽器中用檢索到的實體設置$project->customer,但對我來說看起來矯枉過正。

所有我想要做的是以下幾點:

  1. 顯示可用Customer實體客戶字段列表框(在Project形式)
  2. 在數據庫中,填寫客戶ID字段(在項目表)與所選客戶的ID

我知道它一定很簡單,我只需要3分鐘就可以使用PHP/MySQL和一些外鍵來設置它,但我根本不知道用S做這件事的最好方法ymfony2/Doctrine(意思是尊重標準,不看意大利麪條)。

所以,我的問題:

  1. 我應該在MyBundle\Form\ProjectType->buildForm()函數聲明?
  2. 我應該如何檢索選擇的客戶實體,以及我應該在目錄結構(控制器,實體,prePersist事件偵聽器...)中執行此操作?

謝謝。

+0

您能否告訴我們您的Project <->客戶關係是如何在您的Project類中定義的? –

+0

剛剛通過回答我自己的問題回答了您的評論。感謝您的幫助。 – Jivan

+0

我只是想確保你的關係是正確的,給你答案:你無事可做;) –

回答

0

剛剛找到答案。這真的很簡單:)

在MyBundle /表格/ 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負責所有這些。簡單的魔法。

相關問題