多对一 - Symfony不会生成正确的基于ID的关系

时间:2012-09-04 15:50:21

标签: php mysql symfony1 doctrine-orm

Tag表与Category表的关系为多对一(许多标签与一个类别相关,或者一个类别有多个标签)。

我应该从表Tag到表Category获得正常的多对一关系。它应该基于表Category(名为id_category)中的ID。但是,相反,我会在表VARCHAR(255)中找到Tag列!

以下是Tag实体的代码部分:

/**
 * @ORM\Column(nullable=true)
 * @ORM\ManyToOne(targetEntity="Category")
 * @ORM\JoinColumn(name="id_category", referencedColumnName="id_category")
 */
protected $category;

类别实体没有相应的相关“标记”列,因为它是单向关系。无论如何,这里是id_category实体中Category的声明方式(尽管我认为这不重要):

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

我通过Doctrine2的命令update --dump-sql获得的结果如下:

ALTER TABLE Tag ADD category VARCHAR(255) DEFAULT NULL

Doctrine给了我VARCHAR,而不是INTEGER作为外键的id。有谁知道为什么?
如何告诉 Symfony在这种情况下建立关系?

1 个答案:

答案 0 :(得分:0)

不要使用@ORM \ Column,只需@ORM \ ManyToOne:

/**
 * @ORM\ManyToOne(targetEntity="Category")
 * @ORM\JoinColumn(name="id_category", referencedColumnName="id_category", nullable=true)
 */
protected $category;