2012-03-14 62 views
0

我試圖創建一個簡單的表單來添加公司,並且我遇到了使用實體的麻煩。Symfony2實體字段的形式

我添加使用一個公司實體類型選擇欄:

->add('idtypesociete', 'entity', array('class' => 'PromocastUtilisateurBundle:PcastTypesociete', 'property' => 'nomtypesociete')) 

但是,當我提交表單我idtypesociete字段包含「PcastTypesociete」對象,而不是剛剛選擇的選項的值。所以提交失敗。

我犯了這樣的我公司實體和我typeCompany實體之間的多對多關係之一:

/** 
* @var integer $idtypesociete 
* 
* @ORM\Column(name="IDTYPESOCIETE", type="integer", nullable=false) 
* @ORM\ManyToOne(targetEntity="Promocast\UtilisateurBundle\Entity\PcastTypesociete") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="PcastTypesociete_idtypesociete", referencedColumnName="idtypesociete") 
* }) 
*/ 
private $idtypesociete; 

你有一個解決方案來獲得唯一入選的公司類型的ID? (如果可能,沒有提出簡單的sql請求來列出我的公司類型)

非常感謝!

回答

1

如果關係正常,那麼Symfony 2通常會爲您構建表單字段做得非常好。

我認爲問題是$ idtypesociete屬性。你期望在水合物體上存儲一個整數嗎?

學說關聯使用實體關係。您提供的註釋決定了像連接列這樣的幕後內容: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-one-unidirectional

我建議在做任何事情之前備份或提交您的工作。

是否將實體屬性更改爲以下幫助?

/** 
* @var PcastTypesociete $typesociete 
* 
* @ORM\Column(name="IDTYPESOCIETE", type="integer", nullable=false) 
* @ORM\ManyToOne(targetEntity="Promocast\UtilisateurBundle\Entity\PcastTypesociete") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="PcastTypesociete_idtypesociete", referencedColumnName="idtypesociete") 
* }) 
*/ 
private $typesociete; 

您可能需要通過理論來更新你的數據庫模式:使用控制檯更新,如果它不能正常工作的第一次:模式。您的實體也需要更新以反映新的屬性名稱。

如果這樣的話,那麼你的表單應該只需要->add('typesociete')的表單類型,並且你將有一個正常運行的實體選擇字段,因爲Symfony足夠聰明,可以知道要使用的字段類型。

+0

對不起,爲時已晚,但是我終於設法做到了!非常感謝你的幫助 ! – Snroki 2012-03-20 15:20:01