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。总是有多对多的选择。