symfony2 / doctrine2中的多级getter

时间:2013-11-07 08:35:07

标签: php symfony doctrine-orm getter entities

我想知道使用symfony2 / doctrine2是否有更清晰的方法来接近下面的系统。

我目前有三个实体

实体A - 与B类的多对一关系,与C类的一对多关系 实体B - 与A类的一对多关系,与C类的一对多关系。
实体C - 与A和B类的多对一关系。

如果我执行$ entityA-> getEntityB() - > getEntityC(),它将返回分配给实体B的所有C实体,但我真正想要的是分配给两个实体的所有实体C实体B和实体A.基本上我想要识别吸气剂链,如果这是有道理的。

目前我必须将实体A传递给getEntityC方法,并过滤掉我不想要的值,这些值在处理更多对象和代码的其他部分时会开始变得有点混乱。

有没有办法设置这个,最后一个吸气剂将强制父母双方的关系,而不仅仅是直接的?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我建议不要试图通过getter获取值,而是通过DoctrineQueryBuilder创建一个查询并使用多个左连接。例如:

$repository = $this->getDoctrine()->getRepository('GreatBundle:Entity');
$q = $repository->createQueryBuilder('e1', 'e2', 'e3')->leftJoin('e1.e2', 'e2')->leftJoin('e1.e3', 'e3');
$columns = array(
    'e1.id',
    'e2.id as e2_id',
    'c3.id as e3_id',
);
$result = $q->select($columns)->getQuery()->getArrayResult();

很抱歉,我没有完全了解您的使用案例,但您必须重新创建查询以适应它。