1

通常我只会延迟加载我的实体,但现在我需要创建一个能够将节点作为数组获取的 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 只有数据库表有。

那么什么是正确的方法呢?

4

2 回答 2

2

什么是节点类型?如果它只是一个字符串,那么你只需要:

$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'。您不能将其添加为参数。

于 2011-05-05T00:58:34.220 回答
0

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

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

其中 type 是另一个实体。

于 2011-05-05T13:22:57.503 回答