Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms id以外字段的Symfony2实体中的关联在表单中显示不正确_Forms_Symfony_Doctrine Orm_Associations_Entity - Fatal编程技术网

Forms id以外字段的Symfony2实体中的关联在表单中显示不正确

Forms id以外字段的Symfony2实体中的关联在表单中显示不正确,forms,symfony,doctrine-orm,associations,entity,Forms,Symfony,Doctrine Orm,Associations,Entity,在my Symfony应用程序中的实体中,存在一个不基于id的关联,而是基于序列号的关联。该协会如下所示: /** * @var Department * * @ORM\ManyToOne(targetEntity="Department") * @ORM\JoinColumn(name="department_serial", referencedColumnName="serial") */ protected $department; 当我为该实体创建表单时,我会添加字段部门,

在my Symfony应用程序中的实体中,存在一个不基于id的关联,而是基于序列号的关联。该协会如下所示:

/**
 * @var Department
 *
 * @ORM\ManyToOne(targetEntity="Department")
 * @ORM\JoinColumn(name="department_serial", referencedColumnName="serial")
 */
protected $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>

A系
B系
C系
D系
E系
F系
上述列表项的值应为每个部门的序列号。由于它们不是,实体与其部门之间的链接似乎丢失,无法保存我的表单。(需要选择一个部门,并且具有这些序列号[0、1、2、3、4、5]的部门不存在。)


因此,我的问题是:如何在我的表单类型中指出关联实体的哪个属性应该用作html列表中的值?我知道有一个名为“属性”的选项可以更改每个列表项的标签,但有没有办法更改其值?

我修复了它;唯一的方法是将@ORM\id添加到实体部门的定义中,从而使实体部门的序列属性成为id

实际的id是由另外两个属性组成的组合键,没有在任何地方使用,而是用于遗留用途。我现在使用@uniqueConstraint定义了这些字段

在这种情况下,这是可能的,但显然,如果id也链接到其他位置,则无法使用此解决方案


不知何故,Symfony2无法访问非id属性,以用作与生成表单的实体相关的实体的列表值。对我来说似乎是个bug…?

如果用
实体
替换
null
会怎么样?我尝试了你的建议。列表项的值没有更改。他们仍然收到自动号码。但是,现在选择了第一个选项(value=“0”),之前未选择任何选项。(但没有id为或序列号为0的部门。)能否添加
部门
实体代码?我找到了解决方案,您是否仍希望查看部门实体代码?它是许多其他类的扩展。您以前的
部门
实体中没有任何
@ORM\Id
?我有,甚至有两个。但它们不是在串行字段上设置的,而是在两个名为id和service的字段上设置的。显然,Symfony2无法处理此问题。由于这两个字段在我的Symfony2应用程序中没有被引用(就像数据来自数据库一样),我可以将它们定义为一个唯一的对,而不是一个id。接下来,我可以将序列定义为id,然后一切正常。我仍然相信Symfony2应该能够在串行字段不是id的情况下处理这个问题,因为它被正确地定义为关联。