在我的Symfony应用程序中的实体中,有一个关联不是基于id的,而是基于序列号。该协会看起来像这样:
/**
* @var Department
*
* @ORM\ManyToOne(targetEntity="Department")
* @ORM\JoinColumn(name="department_serial", referencedColumnName="serial")
*/
protected $department;
当我为这个实体创建一个表单时,我像这样添加字段Department:
->add('department', null, array
(
'label' => 'Choose department',
'required' => true,
//some more...
))
问题是,当表单呈现时,我最终得到错误的html列表项值。项目似乎得到自动编号,因为值不是实际的部门ID。它们也不对应于序列号,这是我的目标。这是我得到的一个例子:
<select id="someId" name="form[someName]">
<option value="0">Department A</option>
<option value="1">Department B</option>
<option value="2">Department C</option>
<option value="3">Department D</option>
<option value="4">Department E</option>
<option value="5">Department F</option>
</select>
上面列表项的值应该是每个部门的序列号。由于它们不是,实体与其部门之间的联系似乎丢失了,保存我的表格是不可能的。 (需要选择一个部门,并且不存在具有这些序列号[0,1,2,3,4,5]的部门。)
因此,我的问题是:如何在我的表单类型中指明关联实体的哪个属性应该用作html列表中的值?我知道有一个名为“property”的选项来更改每个列表项的标签,但有没有办法改变它的值?
答案 0 :(得分:0)
我修好了;唯一的方法是通过在其定义中添加@ORM \ Id来使实体部门的序列属性成为id。
实际的id,是由两个其他属性组成的组合密钥,在任何地方都没有使用,但是用于遗留目的。我现在使用@uniqueConstraint定义了这些字段。
在这种情况下,这是可能的,但显然如果id也链接到其他地方,则不能使用此解决方案。
不知何故,Symfony2无法访问非id属性,以用作与正在构建表单的实体相关的实体的列表值。对我来说似乎是一个错误......?