2010-06-28 3 views
3

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

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

Есть ли что-то вдоль линий

$view->query->add_where() 

, что можно вставить РЕГИСТРИРУЙТЕСЬ заявление?

+0

Ну, есть '$ view-> query-> add_table()' и '$ view-> query-> add_relationship()', но их использование, отношение и преко из кода не являются очевидными (по крайней мере, не для меня). Не можете ли вы просто добавить отношения через пользовательский интерфейс Views, чтобы убедиться, что ваши необходимые таблицы подключены? –

+0

@Henrik После того, как вы вникли в файл query.inc в модуле views, я нашел функции, которые вы упомянули. От комментариев не так уж много, поэтому использование несколько расплывчато. Кроме того, сделайте свой комментарий ответом, чтобы я мог его принять. – Jukebox

+0

Yup, использование не очевидно, и документации не хватает - я тоже не пытался их использовать, поэтому я не могу с этим справиться. Повернул комментарий, чтобы ответить, как было предложено - спасибо. –

ответ

2

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

Может быть, вы могли бы добавить отношения с помощью Views UI, чтобы убедиться, что необходимые таблицы получить присоединились


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

+0

На самом деле, добавив еще одну взаимосвязь в представлениях, пользовательский интерфейс работал для меня. Все, что мне нужно было сделать, это посмотреть на сгенерированный запрос из представлений, чтобы узнать, какая таблица нужна для перехода в функцию add_where. Ура! – Jukebox

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'); 
} 
Смежные вопросы