Стремится загрузить частичную ассоциацию в Доктрине - PullRequest
3 голосов
/ 24 декабря 2010

Я хочу получить некоторые сущности с загруженной частью их ассоциаций.

Это самореференциальная иерархическая связь с такой таблицей:

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

Теперь яхочу предварительно загрузить сущность с некоторыми из ее дочерних элементов, сопоставляя предложение WHERE, например, entity.attribute_id =?.

У меня это в простом SQL, например:Я не знаю, как это сделать в 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 голосов
/ 07 ноября 2018

попробуйте это:

$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);
...