(Doctrine)从父母与孩子有n个关系的孩子加入父母
问题描述:
我目前拥有像这样的实体结构;(Doctrine)从父母与孩子有n个关系的孩子加入父母
ParentEntity
- id
- name
- childEntityRelation1
- childEntityRelation2
- childEntityRelation3
- childEntityRelation4
ChildEntity
- id
- ...
其中ParentEntity具有四个强制关系来分隔ChildEntity的实例,工作正常。然而,ChildEntity不具备ParentEntity的任何知识。
对于使用QueryBuilder的任何给定ChildEntity,我怎样才能返回其对应的父实体? ChildEntity是否需要与ParentEntity有四个独立的反向关系,如果有的话,在查询中如何工作?
实体映射
每个父实体的四个孩子的关系如下;
/**
* @ORM\ManyToOne(targetEntity="ChildEntity", cascade={"persist", "remove"})
* @ORM\JoinColumn(name="child_one_id", referencedColumnName="id")
*/
由于ChildEntity当前与其父项没有注释关系。
答
难道你不能扭转你的关系,让孩子有ManyToOne关系,而不是父母?如果定义这种关系这样它会更简单:
ParentEntity:
/**
* @ORM\OneToMany(targetEntity="ChildEntity", mappedBy="parent")
*/
private $children
ChildEntity:
/**
* @ManyToOne(targetEntity="ParentEntity", inversedBy="children")
* @JoinColumn(name="id_parent", referencedColumnName="id")
*/
private $parent
+0
谢谢 - 是的,但我失去了更容易区分不同的孩子(每个父母必须有4个孩子,每个孩子有一个从领域角度来看有不同的含义)。这就是为什么我最初把它们作为单独的关系(所以我可以做一些像'$ parent-> getChild1()','$ parent-> getChild2()'等等 –
答
在母公司的资源库,你可以做这样的事情
$qb=$this->createQueryBuilder('p');
$e=$qb->expr();
return $qb->andWhere($e->orX('p.childEntityRelation1=:child', 'p.childEntityRelation2=:child', 'p.childEntityRelation3=:child', 'p.childEntityRelation4=:child'))
->setParameter('child', $childEntity)
->getQuery()->getResult()
请添加您当前的关联映射。 – xyoTick
添加了一个子实体关系的例子,所有四个都是一样的,但有不同的连接列@xyoTick –