Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding a JOIN statement in hook_views_query_alter()

I need to modify a query Views generates so that I can use highly custom filters. I have implemented the add_where() function with some ORs thanks to this question: OR operator in Drupal View Filters

However this only solves a part of my problem. There are some fields that I cannot filter on because I need to have extra JOINs in my query.

Is there something along the lines of

$view->query->add_where()

that can insert JOIN statements?

like image 853
Jukebox Avatar asked May 11 '26 01:05

Jukebox


2 Answers

I found an answer here. Shameless copy:

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');
}
like image 141
user151841 Avatar answered May 13 '26 14:05

user151841


Well, there is $view->query->add_table() and $view->query->add_relationship() (in the views_query class in 'includes/query.inc'), but their usage, relation and preconditions are not obvious from the code (at least not for me).

Maybe you could add the relationships via the Views UI to ensure that your needed tables get joined in.


(Note: Comment turned to answer, as no better idea showed up :/

like image 31
Henrik Opel Avatar answered May 13 '26 15:05

Henrik Opel



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!