Php 是否可以引用除';id';为了一个专栏?

Php 是否可以引用除';id';为了一个专栏?,php,doctrine-orm,Php,Doctrine Orm,我有一个项目实体,该实体与类别实体有多通关系。我希望它们由一个字段连接,而不是类别的id(在本例中,一个名为id2)的字段)。下面列出了我的模式 class Item { /** * @ORM\Id * @ORM\Column(name = "id", type = "integer") * @ORM\GeneratedValue(strategy = "AUTO") */ protected $id; /** * @OR

我有一个
项目
实体,该实体与
类别
实体有
多通
关系。我希望它们由一个字段连接,而不是类别的
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;
当我尝试保存
项目时
出现以下错误:

注意:未定义的索引:vendor/doctor/lib/doctor/ORM/Persisters/basicintypersister.php第511行中的id2

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

编辑
根据官方的条令2文件,我想要实现的目标是不可能的

不能使用指向非主键的联接列。 条令将认为这些是主键,并创建延迟加载 具有数据的代理,这可能导致意外结果。教条 出于性能原因,无法验证此选项的正确性 在运行时设置,但仅通过“验证架构”命令


来源:

我认为条令主义希望这些是主键,来自:

名称:保存此关系的外键标识符的列名

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


您可能只需要使用category.id2,就可以将其保留为字符串;无论如何值得一试。

我只是想报告一下。我能够以manyOne(无方向)关系连接非PKs,但无法以正常方式加载我的对象。它必须加载DQL,如:

SELECT d,u FROM DEntity d
    JOIN d.userAccount u

这样,我就停止了获取错误:缺少上的主键id的值…

感谢您的响应。我尝试将字段类型更改为整数,并添加@Index,但仍然不起作用。呸!看来他们终究要成为fks。总是有多对多的选择。