Попытка использовать EntityFieldQuery для поиска всех узлов с не заданным полем ссылки на узел

8

После некоторого поиска ближайший фрагмент кода, который я нашел:

->fieldCondition('field_name_ref', 'nid', 'NULL', '!=');

Это найдет все, где ссылка на узел не равна нулю. Но если я изменю !=в =ней ничего не возвращает. Я попробовал все комбинации значений, которые я могу придумать:

  • Проходя NULLвместо 'NULL'.
  • Проходя в array()
  • Попытка 1, "<"
  • "", "CONTAINS"
  • "", "="
  • 0, "="

Плюс еще несколько, просто пробуя все комбинации, которые я могу придумать.

Как я могу это осуществить?

jmickela
источник

Ответы:

7

Как бы безумно это не звучало, вы не можете. Обычно вы используете IS NULLоператор, чтобы сделать это, но он, очевидно, не поддерживается EntityFieldQuery:

EntityFieldQuery не поддерживает isNull или isNotNull

Также я думаю, что EntityFieldQuery использует внутренне INNER JOIN, а не LEFT JOINзаписи, которые не имеют значения в вашей таблице условий, в любом случае будут исключены из результатов запроса. О проблеме сообщалось несколько раз:

Клайв
источник
Я закончил тем, что использовал это: drupal.org/node/1226622#comment-6809826 Спасибо!
mikeytown2
Я думаю, что это был ваш первый ответ на Drupal.SE ... +1 сейчас, примерно через 4 года ... И поздравляю с попаданием в 100 K представителя !!!
Pierre.Vriens
Приветствия @ Pierre.Vriens, по-видимому, я получаю футболку;)
Клайв
5

В качестве обходного пути я добавил пользовательский тег в запрос, а затем использовал его hook_query_TAG_alter(), см. # 1157006 на drupal.org для получения дополнительной информации.

Джузеппе Рота
источник