我有一个Item实体,该实体与ManyToOne实体具有Category关系。我希望它们由Category的id以外的其他字段(在这种情况下,称为id2的字段)加入。我的架构在下面列出。

class Item {
    /**
     * @ORM\Id
     * @ORM\Column(name = "id", type = "integer")
     * @ORM\GeneratedValue(strategy = "AUTO")
     */
    protected $id;
    /**
     * @ORM\ManyToOne(targetEntity = "Category")
     * @ORM\JoinColumn(name = "category_id", referencedColumnName = "id2")
     */
    protected $category;
}

class Category {
    /**
     * @ORM\Id
     * @ORM\Column(name = "id", type = "integer")
     * @ORM\GeneratedValue(strategy = "AUTO")
     */
    protected $id;
    /**
     * @ORM\Column(name = "id2", type = "string", length = "255", unique = "true")
     */
    protected $id2;

当我尝试保存Item时,出现此错误:



果然,如果我将id2批注中的id更改为JoinColumn,则一切正常,但是我需要通过id2连接实体。这可能吗?

编辑
根据《 Doctrine 2》官方文档,我想实现的目标是不可能的。



资料来源:https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/limitations-and-known-issues.html#join-columns-with-non-primary-keys

最佳答案

我认为,Doctrine希望这些是the docs的主键:



从您的代码示例中跳出来的另一件事是category.id2,类型为字符串,我至少希望它是一个整数,但它可能还需要 @JoinColumn 才能正常工作。

您也许可以只使用category.id2上的@Index并将其保留为字符串;反正值得一试。

关于php - 是否可以为JoinColumn引用 'id'以外的其他列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8919910/

10-13 01:52