[development] views: chaining tables

Lluís enboig at gmail.com
Tue May 5 15:26:25 UTC 2009


I am have a node view which should show data from a 3rd table:
node->vid relates to node_cc_proveidors->vid
node_cc_assentaments->provedir_nid relates to node_cc_proveidors->nid

So starting from {node} I should get node_cc_assentaments->valor ; in
SQL what I want is similar to:

SELECT title, valor FROM cc2_node node
LEFT JOIN cc2_node_cc_proveidors node_cc_proveidors ON
node_cc_proveidors.vid = node.vid
LEFT JOIN cc2_node_cc_assentaments node_cc_assentaments ON
node_cc_assentaments.proveidor_nid = node_cc_proveidors.nid
WHERE type IN ('proveidor')

Any hint?

thanks

Right now my view looks like this.

<?php
/**
 * Implementation of hook_views_data()
 */
function cc_proveidors_views_data() {

  $data['node_cc_proveidors']['table']['group']  = 'ComptaCAU
Proveïdors'; //trans
  $data['node_cc_proveidors']['table']['join'] = array(
    'node' => array(
      'left_field' => 'vid',
      'left_table' => 'node',
      'field' => 'vid',
    ),
    'cc_proviedors_assentaments' => array(  //alias for {node_cc_assentaments}
      'left_table' => 'node_cc_assentaments',
      'left_field' => 'proveidor_nid',
      'table' => 'node_cc_assentaments',
      'field' => 'nid',
    )
  );

  $data['node_cc_proveidors']['nif'] = array(
    'title' => 'Nif del proveïdor', //trans
    'help' => '.', //trans
    'field' => array(
      'field' => 'nif',
      'handler' => 'views_handler_field',
      'click sortable' => TRUE,
     ),
      'filter' => array(
          'handler' => 'views_handler_filter_string',
      ),
      'argument' => array(
          'handler' => 'views_handler_argument_string',
      ),
      'sort' => array(
          'handler' => 'views_handler_sort',
      ),
  );

  $data['cc_proviedors_assentaments']['table']['group']  = 'ComptaCAU
Proveïdors 2'; //trans
  $data['cc_proviedors_assentaments']['table']['join'] = array(
    'node_cc_proveidors' => array(
      'left_table' => 'node_cc_assentaments',
      'left_field' => 'nid',
      'field' => 'proveidor_nid',
      'table' => 'cc_assentaments',
    ),
  );
  $data['cc_proviedors_assentaments']['nid'] = array(
      'title' => 'Diners gastats al proveidor', //trans
      'help' => 'Llista totes les despeses del proveïdor, permetent
agrupar-les i fer totals.', //trans
      'field' => array(
          'real field' => 'valor',
          'handler' => 'views_handler_field',
          'click sortable' => TRUE,
      ),
  );
  return $data;
}





-- 
*La vida és com una taronja, què esperes a exprimir-la?
*Si creus que l'educació és cara, prova la ignorància.
*La vida és com una moneda, la pots gastar en el que vulguis però
només una vegada.
*Abans d'imprimir aquest missatge, pensa en el medi ambient.


More information about the development mailing list