我正在尝试加载实体并获取加入另一个实体。
$qb = $this->_em->createQueryBuilder();
$qb->addSelect('be, becs');
$qb->from('MeMyBundle:Entity', 'be');
$qb->leftJoin('be.associations', 'becs');
$qb->andWhere('becs.attribute=:attribute');
$qb->setParameter('attribute', $filterAttribute);
提取连接是必要的,以便以后避免所有这些单个SQL结果。
另一方面,不使用我的filterAttribute(在连接上设置where条件)会导致昂贵的水合过多的连接对象,这是我不需要的。
但是这导致当没有匹配的连接实体存在时,我的结果是空的。但我需要匹配的或空集合。
我怎样才能摆脱这个陷阱?
答案 0 :(得分:2)
尝试使用leftJoin()
方法的第3和第4个参数。
$qb = $this->_em->createQueryBuilder();
$qb->addSelect('be, becs');
$qb->from('MeMyBundle:Entity', 'be');
$qb->leftJoin('be.associations', 'becs', 'WITH', 'becs.attribute=:attribute');
$qb->setParameter('attribute', $filterAttribute);
请参阅http://doctrine-orm.readthedocs.org/en/latest/reference/query-builder.html#high-level-api-methods