Нет необходимости использовать $ view-> query -> ...

аюсь изменить запрос для Views в Drupal (Views версии 3, Drupal версии 7).

То, что я хочу сделать, это изменить запрос перед запуском так, чтобы он ВЛЕВО СОЕДИНЯЛ таблицу, в которой у меня есть веса, назначенные узлам.

Если бы я написал запрос, который я хочу, в SQL, он бы выглядел так:

    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

Этот запрос работает как чемпион, когда я запускаю его в анализаторе запросов. Итак, теперь мне нужно, чтобы это работало в моем модуле.

Я видел несколько подходов, подробно описанных в разных блогах, для разных способов изменения запросов View, но, похоже, они относятся к разным версиям Views. Поэтому очень сложно попытаться определить, может ли что-то, на что я смотрю, работать для моего приложения.

Похоже, мне нужно использовать функцию MODULE_NAME_views_tables (), чтобы сообщить Views, каковы отношения между таблицей, к которой я хочу присоединиться, и таблицей узлов.

Я добавил следующие функции в 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;  
    }

Кажется, это работает, потому что когда я использую Krumo для просмотра массива запросов, я вижу свою таблицу «node_weights» в элементе «table_queue».

В функции views_query_alter () я бы хотел, чтобы она работала примерно так:

    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);
    }

Эта функция довольно плохо работает. Хотя моя таблица соединений появляется в объекте $ view, метод add_relationship выдает ошибку для 3-го аргумента, но я не вижу примеров в Интернете, в которых есть 3 аргумента, поэтому я не знаю, чего в нем не хватает.

Кроме того, я почти уверен, что мой метод add_where неверен, но я не знаю, какими должны быть входные данные. Это просто слепое предположение.

Суть в том, что я хочу присоединить таблицу узлов к моей таблице node_weights, а затем убедиться, что мои веса используются в запросе для сортировки результатов по убыванию, где идентификатор пользователя = идентификатор пользователя в моей таблице, и таблицы объединяются в поле nid.

Заранее спасибо.

Ответы на вопрос(3)

Ваш ответ на вопрос