DQL - выбор связанных объектов - PullRequest
1 голос
/ 05 мая 2011

Обычно я просто лениво загружаю свои сущности, но сейчас мне нужно создать DQL, способный извлекать узлы в виде массива.Я пробовал несколько запросов, но я не могу заставить его работать, ниже приведен два примера:

// example one
$this->em->createQuery('SELECT n FROM Entities\Node n WHERE n.nodeType INSTANCE OF ?1')
    ->setParameter(1, $type)->getArrayResult();
// example two
$this->em->createQuery('SELECT n FROM Entities\Node n WHERE n.nodeType_id = ?1')
    ->setParameter(1, $type->id)->getArrayResult();

Я не уверен, что на самом деле делает INSTANCE OF, но он не работает, использование nodeType_id не работаетлибо потому, что в моей аннотации нет nodeType_id, который есть только в таблице базы данных.

Так что же для этого подходит?

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

Что такое nodeType? Если это просто строка, то вам нужно только:

$this->em
    ->createQuery('SELECT n FROM Entities\Node n WHERE n.nodeType = ?1')
    ->setParameter(1, $type)
    ->getArrayResult();

Если вы используете наследование и вам нужны узлы определенного типа, используйте:

$this->em
    ->createQuery("SELECT n FROM Entities\Node n WHERE n INSTANCE OF $type")
    ->getArrayResult();

Примечание. $ Type должен выглядеть примерно так: $type = 'Entities\Nodes\NodeSubclass'. Вы не можете добавить его в качестве параметра.

0 голосов
/ 05 мая 2011

Мне просто нужно было использовать знак равенства, например:

$this->em->createQuery('SELECT n FROM Entities\Node n WHERE n.nodeType = ?1')
    ->setParameter(1, $type->id)->getArrayResult();

, где тип - это другая сущность.

...