对Doctrine转换的特定SQL查询

时间:2016-06-14 23:40:00

标签: symfony doctrine-orm

我需要在symfon下的学说中转录这种请求:

SELECT node.name
FROM nested_category AS node,
        nested_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
        AND parent.name = 'ELECTRONICS'
ORDER BY node.lft;

我试试这个,但它不起作用:

    $nodesDQL = $this->createQueryBuilder('childs')
        ->select('childs')
        ->from('AppBundle:NestedCategory', 'parent')
        ->join('AppBundle:NestedCategory', 'childs')
        ->where(new BetweenExpression('childs.lft', 'parent.lft', 'parent.right'))
        ->andWhere('parent = :parent')
        ->setParameter('parent', $node);

我不能这样加入,任何想法都欢迎!

我考虑了次要求,但是如果在学说中呢?

问候。

PS:我在英语方面遇到困难。

1 个答案:

答案 0 :(得分:1)

如果每个孩子都有父ID,我认为你不需要加入父母,这可能只是一个标准。

E.g。

    $qb = $this->createQueryBuilder('children');

    $qb->select('children')
        ->from('AppBundle:NestedCategory', 'children')
        ->where($qb->expr()->between('children.lft', ':parentLft', ':parentRgt'))
        ->andWhere('children.parent = :parent')
        ->setParameter('parent', $node)
        ->setParameter('parentLft', $node->getLft()) // assuming you can get lft/rgt from parent
        ->setParameter('parentRgt', $node->getRgt())
        ->getQuery()
        ->getResult()
    ;

这将为您提供父节点的所有子节点,其中子节点位于父节点右侧/左侧之间。