2010-03-21 62 views
7

我经常使用Drupal的Views模块来构建SQL,将其粘贴到我的代码中。它非常了解Drupal数据库模式。Drupal查询构建器

是否有一个模块,可以给我这个功能,或者我可以将这个因素从视图?

回答

3

会很酷Views模块的延长,以更好地支持方案的使用,但在那之前,你可能也许想看看一个我的同事们试图创造类似这样的事情的东西:在提供浏览数据作为一种服务http://github.com/hugowetterberg/query_builder

与此相关的可能是服务项目的尝试,我们现在都分离出到它自己的模块的努力:http://drupal.org/node/709100可能值得追随,因为它需要一定的水平编程访问视图。

多数民众赞成编程方式访问浏览模块的另一个例子是发展种子Litenode:http://developmentseed.org/blog/2009/feb/4/litenode

更新15/12-2010:在Drupal 7 EntityFieldQuery几乎就像使用视图编程构建查询 - 其差别在于EntityQueryBuilder仅适用于实体和领域,并且还因为它实际上可以针对使用的任何类型的现场存储构建查询 - 例如,像MongoDB这样的NoSQL数据库。例如可以在这里找到:http://drupal4hu.com/node/267

0

是的,我认为意见是最好知道使用什么表的电流场,因为许多模块(和更多的意见)有钩子函数,提供有关这个领域,表中的一些信息,并与其他连接类型表。

你也可以读通过表和字段的方案:http://drupal.org/project/schema

1

虽然这不是做事情的理想方式,你可以得到一个视图的结果如下:

$view = views_get_view('search'); 
$view->set_display('main'); 
$view->set_items_per_page(0); 
$view->execute(); 

$items = array(); 
foreach ($view->result as $row) { 
    $items[] = $row; 
} 

这样一来,只要您修改意见查询,您不必重新复制代码。我同意视图需要分解成查询构建API和UI。

+2

2.8版本的意见模块的推出了'views_get_view_result($名称,$ display_id = NULL)'函数来做到这一点。 –

0

我很好奇 - 你为什么要用Views来构建SQL,然后不使用Views?

当谈到像多对多关系,GROUP BY,COUNT,SUM,subquerying等更困难的事情时,最好自己编写它(特别是如果contrib模块没有视图支持,并且您需要多于节点表)。

对我来说,当视图无法完成它,我写一个简单的模块调用hook_menu(注册路径)与做我需要查询一个回调。

+0

我认为问题来自哪些表的Drupal的数据都是exctracted ...... – Nikit

+0

你回答自己的问题! “当Views无法完成时” – Rimian