Добавление оператора JOIN в hook_views_query_alter () - PullRequest
3 голосов
/ 28 июня 2010

Мне нужно изменить запрос, генерируемый представлениями, чтобы я мог использовать настраиваемые фильтры. Я реализовал функцию add_where () с некоторыми OR, благодаря этому вопросу: Оператор OR в Drupal View Filters

Однако это решает только часть моей проблемы. Есть некоторые поля, которые я не могу отфильтровать, потому что в моем запросе должны быть дополнительные JOIN.

Есть ли что-то вроде

$view->query->add_where()

что может вставлять операторы JOIN?

Ответы [ 2 ]

5 голосов
/ 08 августа 2014

Я нашел ответ здесь . Бесстыдная копия:

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 голосов
/ 01 июля 2010

Ну, есть $view->query->add_table() и $view->query->add_relationship() (в классе views_query в 'includes / query.inc'), но их использование, отношения и предварительные условия не очевидны из кода (по крайней мере, не для меня).

Может быть, вы могли бы добавить отношения через пользовательский интерфейс Views, чтобы убедиться, что необходимые таблицы объединены.


(Примечание: комментарий превратился в ответ, так как не пришла лучшая идея: /

...