1

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

我目前有三个实体

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

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

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

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

任何帮助将非常感激。

4

1 回答 1

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

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

于 2013-11-11T14:39:53.067 回答