Я хотел бы выполнить запрос, используя объект EntityFieldQuery. Мне нужно значение из таблицы node и node_access, поэтому мне нужно использовать INNER JOIN. Из документации do я не могу понять, как это возможно.
Вот что у меня есть -
$query = new EntityFieldQuery();
$result = $query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'node_access')
->propertyCondition('type', 'external_link')
->propertyCondition('status', 1)
->fieldCondition('gid', '3', '=')
->fieldCondition('realm', 'domain_id', '=')
->fieldCondition('grant_view', '1', '>=')
->range(0,1)
->execute();
->fieldCondition('field_name', 'target_id', $entities_a, 'IN');
Ответы:
Вы не можете добавлять дополнительные объединения
EntityFieldQuery
напрямую (это не поддерживается), но вы можете добавить тег к запросу, внедритьhook_query_TAG_alter()
и добавить соединение вручную, когда запрос преобразуется в стандартный запрос БД.Это не проверено, но, вероятно, поможет вам в этом:
А затем запрос изменить функцию:
Другой способ сделать это состоит в том, чтобы создать подкласс
EntityFieldQuery
самому себе и добавить соединение, но я думаю, что приведенный выше метод проще в этом случае.источник
EntityFieldQuery
db_select
, тогда вы можете иметь столько контроля, сколько захотитеEntityFieldQuery
не выполняет никакого кэширования, он просто оборачиваетSelectQuery
и добавляет несколько методов для сущностей. Эти дополнительные методы объясняют небольшое (очень незначительное) снижение производительности, которое вы испытаете, используя его по сравнению с обычнымSelectQuery
Если вы используете пользовательские свойства со своими таблицами, метод tag не будет работать. Вместо этого вам нужно использовать подзапросы:
См. Требуется объединение в EntityFieldQuery, как насчет подзапроса? для деталей.
источник