Рейтинг:2

Удалите результаты из отношений (добавьте условие ON к JOIN)

флаг de

Мне нужно добавить условие ON к представлениям JOIN. Я не могу использовать контекстный фильтр, так как он полностью отфильтрует результаты, а мне нужно получить результат в любом случае (есть и другие объединения). Поэтому мне нужно убедиться, что фильтр происходит при СОЕДИНЕНИИ, а не как условие ГДЕ.

Чтобы быть более конкретным, я хочу показать значение, когда отношения не существуют. Отношение одного типа NODE к другому NODE того же типа, и я не хочу, чтобы текущий узел извлекался. Таким образом, условие ON должно быть И join_table.id != original_table.id.

Я новичок в изменении запросов представлений. Может ли кто-нибудь помочь в том, как добавить условие ON к запросу Views либо через пользовательский интерфейс администратора (если возможно), либо через изменение запроса?

Спасибо

sonfd avatar
флаг in
Это помогает? https://drupal.stackexchange.com/a/251700/48114
Jaypan avatar
флаг de
Почти, но нет. Он показывает, как добавить условие «ВКЛ», но условие для фиксированного значения, где я условие должно быть в другом столбце таблицы.
sonfd avatar
флаг in
Можете ли вы использовать некоторые другие параметры, перечисленные здесь: https://api.drupal.org/api/drupal/core%21modules%21views%21src%21Plugin%21views%21join%21JoinPluginBase.php/property/JoinPluginBase%3A%3Aextra /8.2.х
Jaypan avatar
флаг de
Спасибо за дополнительную информацию. Я играл с ним какое-то время, но я не вижу никакой комбинации, которая позволила бы мне получить правильные таблицы и столбцы, указанные в запросе, в частности, поскольку требуется `значение`, но я не работаю со значением, я работаю с именем столбца.
Рейтинг:3
флаг de

Благодаря помощи sonfd выше, я смог найти своего рода решение. Мне не удалось сравнить два столбца, как я пытался, но я смог использовать $ вид-> аргументы прийти к результату, который я хотел.

Чтобы ответить на вопрос, как добавить в JOIN дополнительное условие ON, можно сделать следующее:

функция HOOK_views_query_alter (ViewExecutable $ view, QueryPluginBase $ запрос) {
  if ($view->id() == VIEW_ID && $view->current_display === DISPLAY_ID) {
    $table = $query->getTableInfo(TABLE_NME);
    $table['join']->extra = empty($table['join']->extra) ? [] : $table['join']->extra;
    $таблица['присоединиться']->дополнительно[] = [
      'поле' => ИМЯ_ПОЛЯ,
      'оператор' => '!=',
      'value' => VALUE, // В моем случае $view->args[0],
    ];
  }
}

Ответить или комментировать

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