-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支持。
我不相信教義可以像你想要的那樣處理「如果」情況。我將使用ORM(即您的'Tree'實體實例,通過它們的getter/setter,但它不像本機SQL那樣靈活)或本地SQL,如下所述:http://docs.doctrine-project.org /projects/doctrine-orm/en/latest/reference/native-sql.html –
查看doctrine2中的嵌套集實現:https://wildlyinaccurate.com/simple-nested-sets-in-doctrine-2/ –