在hook_views_query_alter()中添加JOIN语句

时间:2010-06-28 18:07:00

标签: php sql drupal drupal-6

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

然而,这只能解决我的一部分问题。有些字段我无法过滤,因为我需要在查询中添加额外的JOIN。

是否有类似

的内容
$view->query->add_where()

可以插入JOIN语句吗?

2 个答案:

答案 0 :(得分:5)

我找到了答案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');
}

答案 1 :(得分:2)

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

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


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