0

这似乎应该是一个简单的问题,但我似乎无法解决它。

我有两个实体,人和标志。Flag 与 Person 具有多对一关系。我遇到的问题是 Person 的 id 字段是 bigint,而不是 int 类型。

因此,在 Flag 实体的 ManyToOne 字段上使用这样的语法:

/**
 * @ORM\ManyToOne(targetEntity="Person", inversedBy="flags")
 * @ORM\JoinColumn(name="personId", referencedColumnName="id")
 */
protected $person;

我收到外键错误,类似于

An exception occurred while executing 'ALTER TABLE flags ADD CONSTRAINT FK_B0541BAA20C4B1C FOREIGN KEY

我相信除了生成此错误之外,我已经用尽了此错误的所有其他可能性,因为 personId 字段是整数,而人员的 ID 字段是 bigint。这些外键关系在此捆绑包中的其他实体中运行良好,只有 Person 及其 bigint 主键会导致问题。

我无法将 type="bigint" 添加到 JoinColumn 而不会出现如下错误:

The annotation @ORM\JoinColumn declared on property Acme\AcmeBundle\Entity\PersonFlag::$person does not have a pro
  perty named "type"

而且,如果我添加 Column 注释以声明类型,它只会忽略 JoinColumn,如下所示:

/**
 * @ORM\ManyToOne(targetEntity="Person", inversedBy="flags")
 * @ORM\JoinColumn(name="personId", referencedColumnName="id")
 * @ORM\Column(type="bigint")
 */
protected $person;

这不会产生任何错误,但会创建一个名为“person”且没有外键的列。

那么,我错过了什么,我该如何将这个 ManyToOne 关系添加到一个以 bigint 作为主键的实体?

这是 Person 实体的 ID 字段的注释:

/**
 * @ORM\Id
 * @ORM\Column(type="bigint")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

泰!

4

1 回答 1

1

在实体之间的关系中,我认为您可以避免使用列类型,因为外键应该已经映射到模型中(例如,ID)。试试这个:

/**
 * @ORM\ManyToOne(targetEntity="Person", inversedBy="flags")
 * @ORM\JoinColumn(name="personId", referencedColumnName="id")
 */
protected $person;

然后,在你的人模型中,你应该有这样的东西:

/**
 * @OneToMany(targetEntity="Flag", mappedBy="person")
 */
protected $flags;
于 2013-10-22T16:14:16.580 回答