DQL - 获取相关实体

时间:2011-05-04 23:21:08

标签: php orm doctrine-orm dql

通常我只是懒加载我的实体但是现在我需要创建一个能够将节点作为数组获取的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 个答案:

答案 0 :(得分:2)

什么是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'。您无法将其添加为参数。

答案 1 :(得分:0)

我只需要使用这样的等号:

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

其中type是另一个实体。