表单中的Symfony2实体字段

时间:2012-03-14 15:18:31

标签: php forms symfony entity

我正在尝试创建一个简单的表单来添加公司,而且我在使用实体时遇到了麻烦。

我使用公司类型实体添加了一个选择字段:

->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 个答案:

答案 0 :(得分:1)

如果关系正常,那么Symfony 2通常可以很好地为您构建表单字段。

我认为问题是$ idtypesociete属性。您是否希望在水合实体上存储整数?

Doctrine association使用实体关系。您提供的注释确定了连接列之类的幕后内容: 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;

如果第一次无法正常工作,您可能需要通过doctrine:schema:update使用控制台更新数据库架构。您的实体也需要更新以反映新的属性名称。

如果可以,那么您的表单只需要表单类型中的->add('typesociete'),并且您将拥有一个正常运行的实体选择字段,因为Symfony足够聪明,可以知道要使用的字段类型。