看一下以下模型:
class Team
/**
* @id
* @ManyToOne(targetEntity="Person")
* @JoinColumn(name="id_manager", referencedColumnName="id")
*/
protected $manager;
/**
* @id
* @ManyToOne(targetEntity="Stadium")
* @JoinColumn(name="stadium", referencedColumnName="stadium")
*/
protected $stadium;
当我使用数组hidration查询团队时,我会这样做:
$qb->select(['a', 'b', 'c']);
$qb->from(Team::class, 'a');
$qb->leftJoin('a.manager', 'b');
$qb->leftJoin('a.stadium', 'c');
$teams = $qb->getQuery()->getArrayResult();
对于每个团队,结构如下:
[
"id_manager": 3,
"manager": [
"id": 3,
"name": "Billy"
],
"stadium": 8
]
了解"经理"加载为一个数组(如预期的那样),但"体育场"。在第一个符号看起来,如果关系字段与列保持列值具有相同的名称。有没有办法避免这种情况而不重命名字段$stadium
?
PS:$qb->select(['a', 'b', 'c as stadium2']);
无效。
编辑我注意到如果删除@id
注释,我会得到预期的结构。
答案 0 :(得分:0)
那么经理的身份也应该是团队的主要关键?那么你的主键是同时的外键吗?不建议这样做。
我建议一个团队的主键是独立的,并且在第二个属性中与经理有关系。
如果您需要结果中的经理ID,则可以达到在您的自定义存储库中,或者您的Team类中的其他属性及其getter未映射到ORM。