Добрый день, очень рассчитываю на вашу помощь.
Задача наипростейшая. Выбрать материалы, которым присвоены определенные теги из словаря. Тэги выбираем из exposed filter. Сделать такой View ничего не стоит. Если бы не одно НО, которое не могу победить. Дело в том, что одно поле с выбором тэгов из словаря относится к разным типам материалов и более того - к профилю пользователя.
Далее, когда мы смотрим на готовый sql-запрос во view, то видим, что он делает LEFT JOIN по этому самому фильтруемому полю, выбирая нужною запись по nid. Но в отдельной таблице этого поля как назло есть 2 вида записей по столбцу entity_type: node и user. И самое противное, что nid иногда совпадает с uid, хотя в таблице это называется entity_id. Из-за этого он "склеивает" неправильный ответ и по содержанию и по многократному выведению одной и той же записи - в общем, полный бардак.
FROM {node} node
LEFT JOIN {field_data_field_science} field_data_field_science_value_0 ON node.nid = field_data_field_science_value_0.entity_id AND field_data_field_science_value_0.field_science_tid = '6'
WHERE (( (node.status = '1') AND( (field_data_field_science_value_0.field_science_tid = '6') )))
ORDER BY node_created DESC
А теперь вопрос Есть ли смысл биться с Views и усложнять запросы на фильтрацию (или может это вообще баг формирования запроса во Views) или просто отказаться от использования одного поля для материалов и пользователей (чтобы не было двусмысленности по entity_id)? Спасибо за помощь.
Комментарии
Интересно услышать мнение, если кто-то сталкивался с проблемой.
Я же пока для себя ее решил разделением поля на два: одно для страниц, другое для пользователей. Скопировал значения и все заработало.
Но все же есть предчувствие, что это недосмотр. Либо views, который не уточняет запросы, либо Drupal Fields, который позволяет использовать одно поле для столь разных вещей.