我目前有一个像这样的实体结构;
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目前与其父级没有注释关系。
答案 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()