使用Doctrine

时间:2016-09-26 07:59:59

标签: sql symfony doctrine-orm

我有以下关闭表:

enter image description here

我想要的是获取没有祖先的行(根节点)。

在上图中我想得的只是第一行。

我尝试了以下DQL:

public function findAllRootGroups()
{
    $subQuery =  $this->createQueryBuilder('c')
        ->select('c')
        ->where('c.depth > 0');

    $query = $this->createQueryBuilder('c2');
    $query->where($query->expr()->notIn('c2.id', $subQuery->getDQL()));

    $roots = $query->getQuery()->getResult();

    echo '<pre>'; \Doctrine\Common\Util\Debug::dump($roots); echo '</pre>';die;
}

但是它返回了深度= 0的所有行。

那么,我怎样才能获得根节点?

感谢。

1 个答案:

答案 0 :(得分:0)

您好像要搜索与ancestor_id相同descendant_idid且深度为0的行

$this->createQueryBuilder('c')
        ->where('c.ancestorId = c.id')
        ->andWhere('c.descendantId = c.id')
        ->andWhere('c.depth = 0')
;