2016-12-12 39 views
-2

將sql查詢轉換爲dql時出現問題。 任何人都可以幫助我。將sql轉換爲dql

這是我走到這一步:

$query = $this->em->createQuery(" 
     UPDATE MyBundle:Tree AS n 
     JOIN MyBundle:Tree AS movingNode ON movingNode.id = :node 
     JOIN MyBundle:Tree AS parentNode ON parentNode.id = :parent 
     SET 
     n.lft = n.lft + 
      IF (parentNode.lft < movingNode.lft, 
       IF (n.lft >= movingNode.rgt + 1, 0, 
         IF (n.lft >= movingNode.lft, parentNode.lft - movingNode.lft + 1, 
           IF (n.lft >= parentNode.lft + 1, movingNode.rgt - movingNode.lft + 1 , 0 
            ) 
          ) 
        ), 
       IF (n.lft >= parentNode.lft + 1, 0, 
         IF (n.lft >= movingNode.rgt + 1, -movingNode.rgt + movingNode.lft - 1, 
           IF (n.lft >= movingNode.lft, parentNode.lft - movingNode.rgt, 0 
            ) 
          ) 
        ) 
       ), 
     n.rgt = n.rgt + 
      IF (parentNode.lft < movingNode.lft, 
       IF (n.rgt >= movingNode.rgt + 1, 0, 
         IF (n.rgt >= movingNode.lft, parentNode.lft - movingNode.lft + 1, 
           IF (n.rgt >= parentNode.lft + 1, movingNode.rgt - movingNode.lft + 1 , 0 
            ) 
          ) 
        ), 
       IF (n.rgt >= parentNode.lft + 1, 0, 
         IF (n.rgt >= movingNode.rgt + 1, -movingNode.rgt + movingNode.lft - 1, 
           IF (n.rgt >= movingNode.lft, parentNode.lft - movingNode.rgt, 0 
            ) 
          ) 
        ) 
       ) 
     WHERE parentNode.lft < movingNode.lft OR parentNode.lft > movingNode.rgt; 
    ")->setParameter('node', $node)->setParameter('parent', $parent); 

好像我需要把它拆分成subquerys或更多querys。 Iam不舒服。

此外,它似乎有更新和加入dql的isent支持。

+3

我不相信教義可以像你想要的那樣處理「如果」情況。我將使用ORM(即您的'Tree'實體實例,通過它們的getter/setter,但它不像本機SQL那樣靈活)或本地SQL,如下所述:http://docs.doctrine-project.org /projects/doctrine-orm/en/latest/reference/native-sql.html –

+0

查看doctrine2中的嵌套集實現:https://wildlyinaccurate.com/simple-nested-sets-in-doctrine-2/ –

回答