(学说)从孩子到父母加入父母与子女

时间:2017-08-08 08:01:12

标签: php doctrine-orm

我目前有一个像这样的实体结构;

ParentEntity
  - id
  - name 
  - childEntityRelation1
  - childEntityRelation2
  - childEntityRelation3
  - childEntityRelation4

ChildEntity
  - id
  - ...

其中ParentEntity有四个强制关系来分隔ChildEntity的实例,这可以正常工作。但是,ChildEntity对ParentEntity没有任何了解。

对于任何给定的ChildEntity,在使用QueryBuilder时,如何返回其对应的父实体? ChildEntity是否需要与ParentEntity有四个单独的反向关系,如果是,那么它在查询中是如何工作的?

实体映射

父实体上的四个子关系中的每一个如下;

/**
 * @ORM\ManyToOne(targetEntity="ChildEntity", cascade={"persist", "remove"})
 * @ORM\JoinColumn(name="child_one_id", referencedColumnName="id")
 */

ChildEntity目前与其父级没有注释关系。

2 个答案:

答案 0 :(得分:0)

难道你不能改变你的关系,所以孩子们有很多关系而不是父母关系吗?如果你定义这样的关系会更简单:

ParentEntity:

/**
 * @ORM\OneToMany(targetEntity="ChildEntity", mappedBy="parent")
 */
private $children

ChildEntity:

/** 
 * @ManyToOne(targetEntity="ParentEntity", inversedBy="children")
 * @JoinColumn(name="id_parent", referencedColumnName="id")  
 */
private $parent

答案 1 :(得分: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()