首页 文章

无法在JoinColumn中为Symfony2 / Doctrine中的外键引用定义列类型

提问于
浏览
0

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

我有两个实体,人和旗 . Flag与Person具有ManyToOne关系 . 我遇到的问题是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字段是一个整数而person的ID字段是bigint . 这些外键关系在此捆绑包中的其他实体之间一直正常工作,它只是导致问题的Person及其bigint主键 .

我无法在JoinColumn中添加type =“bigint”而不会出现如下错误:

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;

TY!

1 回答

  • 1

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

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

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

    /**
     * @OneToMany(targetEntity="Flag", mappedBy="person")
     */
    protected $flags;
    

相关问题