O módulo de campo Exibir permite expor as tabelas de campos como tabelas base às visualizações. Isso difere do comportamento padrão do Views, pois a tabela base é a tabela de campos e não uma entidade da qual os dados do campo são carregados. Por exemplo, ao selecionar o nó como uma tabela base, você pode adicionar campos, mas a principal (tabela base) da consulta ainda é um nó que, dependendo dos seus dados, pode estragar as funções agregadas (também conhecido como um relacionamento muitos-para-um de alguns campos para o nó).
O campo Views permite o acesso direto às tabelas de campos, o que significa que as funções agregadas funcionam corretamente. Além disso, se você precisar fazer associações "interessantes" a outras tabelas de campo, poderá controlá-las completamente usando o seguinte.
/**
* Implements hook_views_data_alter().
*/
function mymodule_views_data_alter(&$data) {
views_field_add_multi_join($data, /* see docs */);
}
O que é bastante simples de usar e permite que você execute funções agregadas em várias tabelas de campo ao mesmo tempo. Em seguida, você pode invocar uma vista manualmente $view->execute()
e retirar os resultados dela. Existem exemplos disso na documentação das visualizações.
Os benefícios dessa abordagem sobre o EntityFieldQuery é que você pode gerenciar o processo no Views (que quase todo mundo já estará usando) e permitir que ele execute a criação de consultas físicas de maneira menos direta, o que ajuda a elevar possíveis avarias no caminho. Além disso, muitas vezes você desejará exibir esses dados agregados em uma tela de administrador, que poderá usar a exibição para fornecer uma exibição e acessar os resultados no código para fins adicionais.
_field_sql_storage_tablename($field)
e_field_sql_storage_columnname($field_name, $column
), que atendem às minhas necessidades atuais, mas não são sustentáveis; portanto, ainda estou interessado em uma resposta para essa pergunta, caso venha.