2017-08-08 138 views
1

我目前拥有像这样的实体结构;(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当前与其父项没有注释关系。

+0

请添加您当前的关联映射。 – xyoTick

+0

添加了一个子实体关系的例子,所有四个都是一样的,但有不同的连接列@xyoTick –

回答

0

难道你不能扭转你的关系,让孩子有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()'等等 –

0

在母公司的资源库,你可以做这样的事情

$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()