我需要修改一个查询视图生成,以便我可以使用高度自定义的过滤器。由于这个问题,我已经使用一些OR实现了add_where()函数:OR operator in Drupal View Filters
然而,这只能解决我的一部分问题。有些字段我无法过滤,因为我需要在查询中添加额外的JOIN。
是否有类似
的内容$view->query->add_where()
可以插入JOIN语句吗?
答案 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添加关系,以确保您所需的表加入。
(注意:评论转向回答,因为没有更好的想法出现:/