代码之家  ›  专栏  ›  技术社区  ›  Rimian

Drupal查询生成器

  •  7
  • Rimian  · 技术社区  · 15 年前

    我经常使用Drupal的视图模块来构建我粘贴到代码中的SQL。它非常了解Drupal数据库模式。

    是否有一个模块可以提供此功能,或者我可以将其排除在视图之外?

    4 回复  |  直到 13 年前
        1
  •  3
  •   VoxPelli    14 年前

    很酷的是,视图模块被扩展为更好地支持编程使用,但在此之前,您可能想看看我的一个同事试图创建类似于这样的东西: http://github.com/hugowetterberg/query_builder

    与此相关的可能是服务项目试图将视图数据作为服务提供,我们目前正在将此工作分离为它自己的模块: http://drupal.org/node/709100 可能值得关注,因为它需要某种程度的对视图的编程访问。

    以编程方式访问视图的模块的另一个示例是Development Seeds LiteNode: http://developmentseed.org/blog/2009/feb/4/litenode

    更新日期:2010年12月15日 EntityFieldQuery 在Drupal 7中,几乎就像用编程方式使用视图来构建查询一样——区别在于EntityQueryBuilder只在实体和字段上工作,而且它还可以根据使用中的任何类型的字段存储构建查询,例如MongoDB之类的NoSQL数据库。示例如下: http://drupal4hu.com/node/267

        2
  •  1
  •   Venkat D.    15 年前

    虽然这不是理想的方法,但您可以获得如下视图的结果:

    $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。

        3
  •  0
  •   Nikit    15 年前

    是的,我认为视图最好知道哪些表用于当前字段,因为许多模块(以及视图中的更多模块)具有钩子函数,这些函数提供有关此字段、表以及与其他表的连接类型的一些信息。

    还可以通过以下方式读取表和字段的方案: http://drupal.org/project/schema

        4
  •  0
  •   Kevin    15 年前

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

    当涉及到更困难的事情,如多对多关系、分组依据、计数、求和、子查询等,无论函数需要什么,最好自己编写(尤其是如果contrib模块不支持视图,并且您需要的不仅仅是节点表)。

    对于我来说,当视图无法完成时,我编写了一个简单的模块,它用一个回调调用hook_菜单(注册路径),并执行我需要的查询。

    推荐文章