2011-06-22 71 views
3

如果我没有在谷歌做足够多的研究,但是说实话我不知道要搜索什么,我想表示歉意。我的问题是与教义。我使用Symfony框架,我想写出下列原始查询在DQL:左加入原则查询语言

SELECT c.id AS id, 
c.name AS name, 
c.active AS active, 
count(c2.id) AS depth, 
(c.rht - c.lft) as rng 
FROM (categories c 
LEFT JOIN categories c2 ON ((c2.lft < c.lft) AND (c2.rht > c.rht) AND c2.active)) 
GROUP by c.id 
ORDER by c.lft ASC 

我可以写它像一个原始查询,但我需要它作为DQL我想用它的sfWidgetFormDoctrineChoice部件。任何帮助,高度赞赏。

在此先感谢!

+0

Doctrine 1.x or 2.x? – borrible

+0

对不起,我忘了早点提到 - 1.2(因为我仍然坚持Symfony 1.4) – fanjabi

回答

3

一个可能approuch是:

$query = Doctrine_Query::create() 
    ->select('c.name AS name, 
      c.active AS active, 
      count(c2.id) AS depth, 
      (c.rht - c.lft) as rng') 
    ->from('categories c') 
    ->leftJoin('c.Categories c2 ON ((c2.lft < c.lft) AND (c2.rht > c.rht) AND c2.active') 
    ->groupBy('c.id') 
    ->orderBy('c.lft ASC'); 

但我认为你在错误的道路。你检查了教条的树状行为吗? http://www.doctrine-project.org/documentation/manual/1_0/nl/hierarchical-data#nested-set:advanced-usage:fetching-a-tree-with-relations

+1

感谢您的建议。这不是我的问题的答案 - 这是我想要的更多。谢谢您的帮助! P.S.我设法做到了,但为了做一个联接Doctrine需要一个与本地和外部列的关系,所以我创建了一个虚拟关系,所以我可以进行左连接,然后重写条件,默认情况下它使用local.foreign_id = foreign.id关系 – fanjabi