【问题标题】:Adding a JOIN statement in hook_views_query_alter()在 hook_views_query_alter() 中添加 JOIN 语句
【发布时间】:2010-06-28 18:06:59
【问题描述】:

我需要修改 Views 生成的查询,以便我可以使用高度自定义的过滤器。由于这个问题,我已经用一些 OR 实现了 add_where() 函数:OR operator in Drupal View Filters

不过,这只解决了我的部分问题。有些字段我无法过滤,因为我的查询中需要有额外的 JOIN。

有没有类似的东西

$view->query->add_where()

可以插入JOIN语句吗?

【问题讨论】:

  • 嗯,有$view->query->add_table()$view->query->add_relationship(),但是它们的用法、关系和前提条件从代码中并不明显(至少对我来说不是)。难道你不能通过 Views UI 添加关系来确保你需要的表被加入吗?
  • @Henrik 在深入查看视图模块中的 query.inc 文件后,我找到了您提到的功能。除了 cmets 没有什么可做的,所以用法有点模糊。另外,请将您的评论作为答案,以便我接受。
  • 是的,用法不明显,并且缺少文档——我也没有尝试过使用它们,所以我对此无能为力。按照建议将评论转为回答 - 谢谢。

标签: php sql drupal drupal-6


【解决方案1】:

我找到了答案here。无耻抄袭:

function hook_views_query_alter(&$view, &$query) {
    $join = new views_join();
    $join->table = 'my_table';
    $join->field = 'my_field';
    $join->left_table = 'left_table';
    $join->left_field = 'left_field';
    $join->type = 'left';
    $join->extra = array(
        array(
            'field' => 'bundle',
            'value' => 'user',
        )
    );
    $query->add_relationship('relationship_name', $join, 'node');
}

【讨论】:

    【解决方案2】:

    嗯,有$view->query->add_table()$view->query->add_relationship()(在'includes/query.inc' 中的views_query 类中),但是它们的用法、关系和前提条件从代码中并不明显(至少对我来说不是)。

    也许您可以通过 Views UI 添加关系以确保您需要的表被加入。


    (注意:评论转向回答,因为没有更好的主意出现:/

    【讨论】:

    • 实际上,在视图 UI 中添加另一个关系确实对我有用。我所要做的就是查看从视图中生成的查询,以找出进入 add_where 函数所需的表。万岁!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    相关资源
    最近更新 更多