With a lot help from Earl, I stumbled this together and he suggested aI share it here:

function foo_views_data_alter(&$data) {
  if (isset($data['term_node'])) {
    $data['term_node']['vid']['title'] = t('Term version ID');
    $data['term_node']['vid']['relationship'] = array(
      'base' => 'node',
      'base field' => 'vid',
      'handler' => 'views_handler_relationship',
      'label' => t('Terms (vid)'),
      );
    $data['term_node']['tid']['title'] = t('Term ID');
    $data['term_node']['tid']['relationship'] = array(
      'base' => 'term_node',
      'base field' => 'tid',
      'handler' => 'views_handler_relationship',
      'label' => t('Terms (tid)'),
      );
  }
}

If you chain these correctly, you can produce SQL such as

SELECT node.nid AS nid, node.title AS node_title, node.type AS node_type FROM node node LEFT JOIN term_node term_node ON node.vid = term_node.vid INNER JOIN term_node term_node_term_node ON term_node.tid = term_node_term_node.tid INNER JOIN node node_term_node ON term_node_term_node.vid = node_term_node.vid WHERE (node_term_node.nid = %d);

Comments

agentrickard’s picture

Um. Wait.

hook_views_data_alter()

Where did _that_ come from?

Ref: http://views.doc.logrus.com/group__views__hooks.html