2017-08-08 137 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()