Agregar tabla Unir, Dónde y Ordenar por a la consulta Vistas en views_query_alter ()

Estoy intentando modificar la consulta de Vistas en Drupal (Vistas versión 3, Drupal versión 7).

o que quiero hacer es cambiar la consulta antes de ejecutarla, de modo que IZQUIERDA SE UNE a una tabla en la que tengo pesos asignados a los nodos.

Si tuviera que escribir la consulta que quiero en SQL, se vería así:

    SELECT a.nid, a.title, a.description
    FROM node a
    LEFT OUTER JOIN node_weights b
    ON a.nid = b.nid
    WHERE b.uid = $uid
    ORDER BY b.weight DESC

Esta consulta funciona como un campeón cuando la ejecuto en el analizador de consultas. Entonces, ahora necesito hacer que funcione en mi módulo.

He visto múltiples enfoques detallados en varios blogs para diferentes formas de modificar las consultas de Vista, pero parece que abordan diferentes versiones de Vistas. Por lo tanto, es muy confuso tratar de determinar si algo que estoy viendo podría funcionar para mi aplicación.

arece que necesito usar una función MODULE_NAME_views_tables () para decirle a Views cuál es la relación entre la tabla que quiero unir y la tabla de nodos.

He agregado las siguientes funciones a MODULE_NAME.views.inc

    function MODULE_NAME_views_tables() {
      $tables['node_weights'] = array(
        "name" => "node_weights",
        "join" => array(
          "left" => array(
            "table" => "node",
            "field" => "nid"
          ),
          "right" => array(
            "field" => "nid"
          ),
        ),
      );
      return $table;  
    }

Esto parece estar funcionando porque cuando uso Krumo para mirar la matriz de consultas, veo mi tabla "node_weights" en el elemento "table_queue".

En la función views_query_alter (), me gustaría que funcionara así:

    function MODULE_NAME_views_query_alter(&$view, &$query) {
      $uid = $_COOKIE['uid']; 
      $view->query->add_relationship('node_weights', new views_join('node_weights', 'nid', 'node', 'nid','LEFT'));
      $view->query->add_where('node_weights', "node_weights.uid", $uid);
      krumo($query);
    }

Esta función es bastante mala. Aunque mi tabla de unión aparece en el objeto $ view, el método add_relationship arroja un error para un tercer argumento, pero no veo ningún ejemplo en línea que tenga 3 argumentos, así que no sé qué falta.

Además, estoy bastante seguro de que mi método add_where no es correcto, pero no sé cuáles deberían ser las entradas. Esto es solo una suposición ciega.

La conclusión es que quiero unir la tabla de nodos a mi tabla node_weights, y luego asegurarme de que mis pesos se usen en la consulta para ordenar los resultados de forma descendente donde la identificación del usuario = la identificación del usuario en mi tabla, y las tablas se unen en el campo nid.

Gracias por adelantado

Respuestas a la pregunta(3)

Su respuesta a la pregunta