Estou usando as Views 7.x-3.6 e tentei alterar a GROUP BY
cláusula da hook_views_query_alter()
seguinte forma:
function mymodule_views_query_alter(&$view, &$query) {
if ($view->name == "view_name"){
$query->add_groupby('field_name');
dpm($query);
}
}
Quando olho para dentro $query
, a groupby
cláusula está ativada corretamente, mas a consulta SQL não é afetada : a GROUP BY
cláusula não aparece:
O que finalmente fiz foi usar um núcleo hook do Drupal ( hook_query_alter()
) e funcionou bem: o SQL agora é afetado.
function mymodule_query_alter(QueryAlterableInterface $query) {
$view_name = 'view_name';
if ($query->hasTag('views_' . $view_name)) {
$query->groupBy('field_name');
}
}
Alguma razão para o meu hook_views_query_alter()
não funcionar? Gostaria de saber se existe uma maneira mais limpa de fazê-lo e.
nid
com o grupo por. Não é necessário para mim. Alguma outra opção? Você sabe como adicionar uma consulta exclusiva nas visualizações?views_handler_filter::query()
justo. Tente$query->distinct();
emhook_query_alter
Tarde para a festa, mas isso pode ajudar outra pessoa.
No meu caso, eu estava fornecendo uma lista de usuários (usando o módulo adicional Profile2) com um campo Termo de taxonomia ( https://drupal.org/node/1808320 ). Eu estava vendo vários resultados dos quais não consegui me livrar da API do Views 3.
No meu módulo personalizado, adicionei:
Os parâmetros para add_field são
fonte
Se você ainda estiver enfrentando instruções GROUP BY desnecessárias adicionadas à consulta, poderá removê-las
hook_query_alter()
. Resolvi o problema solicitando comentários pelos comentários dos pais mais comentados, por exemplo.Então,
hook_views_query_alter()
eu tenho:Recebi um erro relacionado à incapacidade de agrupar por
campo que é realmente um resultado da
COUNT()
função SQL .Eu acabei com isso:
fonte
Se você procurar a documentação de hook_views_query_alter , acredito que a consulta já esteja preparada para executar. Por exemplo, substituições foram feitas pela API do banco de dados e estão prestes a ser enviadas pelo MySQL. Outro exemplo de uso de hook_views_query_alter pode ser visto no blog do BTMash .
Sendo esse o caso, você não possui mais um Objeto de Consulta ao Banco de Dados, mas as partes da instrução SQL com expressões, variáveis, etc. como uma Matriz.
Eu não tenho uma consulta na minha frente, mas algo como o seguinte código não testado é o que você deseja:
fonte
$query
objeto é alterado (diferentemente do que foi dito acima), mas novamente, a consulta SQL não muda!É assim que é feito em views_query_alter; a parte node_access não é necessária.
fonte
Gostaria de saber que ninguém forneceu uma solução real que simplesmente funcionasse. Existe um método que eu encontrei aqui , muito obrigado a @ b-ravanbakhsh:
fonte
No Drupal 8 e, graças à abordagem graceman9, será:
fonte