渴望在Doctrine中加载部分关联

时间:2010-12-24 15:13:21

标签: php doctrine

我想获取一些实体,其中一部分关联已加载。

这是一种自我参照的等级关系,有一个像这样的表:

CREATE TABLE entities (
    id serial PRIMARY KEY,
    parent_id integer REFERENCES entities,
    attribute_id integer REFERENCES attributes,
    [...]
);

现在我想用一些子进程预加载一个实体,匹配一个WHERE子句,比如entities.attribute_id =?。

我在普通的SQL中有这样的:

SELECT * FROM entities p_ent INNER JOIN entities c_ent ON p_ent.id = c_ent.parent_id WHERE c_ent.attribute_id = ?

但我不知道如何在Doctrine中做到这一点。

当然我试过了:

$qb = $em->createQueryBuilder();

$qb->select('p_ent', 'c_ent')
   ->from('Entities', 'p_ent')
   ->innerJoin('p_ent.children', 'c_ent')
   ->where('c_ent.attribute = ?1')
   ->setParameter(1, $attr);

但是这不起作用 - 关系总是被所有子实体完全加载。

1 个答案:

答案 0 :(得分:0)

尝试:

$qb = $this->_em->createQueryBuilder()
        ->select('PARTIAL p_ent.{id, your_fields ...}')
        ->from($this->_entityName, 'p_ent')
        ->innerJoin('p_ent.children', 'c_ent')
        ->addSelect('PARTIAL c_ent.{id, your_fields ...}')
        ->where('c_ent.attribute = ?1')
        ->setParameter(1, $attr);