Eu gostaria de executar uma consulta usando o objeto EntityFieldQuery. Eu preciso de valor da tabela node e node_access, portanto, eu precisaria usar INNER JOIN. Na documentação do do, não consigo descobrir como isso é possível.
Aqui está o que eu tenho -
$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');
Respostas:
Você não pode adicionar associações extras a um
EntityFieldQuery
diretamente (não é suportado), mas pode adicionar uma marca à consulta, implementarhook_query_TAG_alter()
e adicionar a associação manualmente quando a consulta é convertida em uma consulta db padrão.Isso não foi testado, mas provavelmente o levará até o final:
E então a consulta altera a função:
A outra maneira de fazer isso seria subclassificar-
EntityFieldQuery
se e adicionar a junção, mas acho que o método acima é mais simples nesse caso.fonte
EntityFieldQuery
db_select
, então você pode ter o controle que quiser sobre elaEntityFieldQuery
não faz nenhum cache, apenas envolve umSelectQuery
e adiciona alguns métodos para entidades. Esses métodos extra explicar a ligeira (muito ligeira) redução de desempenho você experiência de usá-lo em oposição a um regularSelectQuery
Se você estiver usando propriedades personalizadas com suas próprias tabelas, o método tag não funcionará. Você precisa usar subconsultas:
Consulte Precisa de uma associação em uma EntityFieldQuery, que tal uma subconsulta? para detalhes.
fonte