J'utilise Views 7.x-3.6 et j'ai essayé de modifier la GROUP BY
clause avec hook_views_query_alter()
comme ci-dessous:
function mymodule_views_query_alter(&$view, &$query) {
if ($view->name == "view_name"){
$query->add_groupby('field_name');
dpm($query);
}
}
Quand je regarde dedans $query
, la groupby
clause est correctement activée mais la requête SQL n'est pas affectée : la GROUP BY
clause n'apparaît pas:
Ce que j'ai finalement fait, c'est utiliser un core core Drupal ( hook_query_alter()
) et cela a bien fonctionné: le SQL est maintenant affecté.
function mymodule_query_alter(QueryAlterableInterface $query) {
$view_name = 'view_name';
if ($query->hasTag('views_' . $view_name)) {
$query->groupBy('field_name');
}
}
Une raison pour laquelle mon hook_views_query_alter()
ne fonctionne pas? Je me demande s'il y a une façon plus propre de le faire et.
nid
avec group by. Ce n'est pas nécessaire pour moi. Une autre option? Savez-vous comment ajouter une requête unique dans les vues?views_handler_filter::query()
foire. Essayez$query->distinct();
danshook_query_alter
Tard dans la soirée mais cela pourrait aider quelqu'un d'autre.
Dans mon cas, je fournissais une liste d'utilisateurs (en utilisant le module supplémentaire Profile2) avec un champ de terme de taxonomie ( https://drupal.org/node/1808320 ). Je voyais plusieurs résultats dont je ne pouvais pas me débarrasser via l'API Views 3.
Dans mon module personnalisé, j'ai ajouté:
Les paramètres pour add_field sont
la source
Si vous rencontrez toujours des instructions GROUP BY inutiles ajoutées à la requête, vous pouvez les supprimer
hook_query_alter()
. J'ai résolu le problème de la commande des commentaires par la plupart des commentaires des parents commentés par exemple.Donc,
hook_views_query_alter()
j'ai:J'ai une erreur liée à l'impossibilité de regrouper par
champ qui est en fait le résultat de la
COUNT()
fonction SQL .Je me suis retrouvé avec ceci:
la source
Si vous regardez la documentation de hook_views_query_alter , je pense que la requête est déjà prête à s'exécuter. Par exemple, des remplacements ont été effectués par l'API de base de données et sont sur le point d'être envoyés par câble à MySQL. Un autre exemple d'utilisation de hook_views_query_alter peut être vu sur le blog BTMash .
Cela étant, vous n'avez plus d'objet de requête DB, mais les éléments de l'instruction SQL avec des expressions, des variables, etc. sous forme de tableau.
Je n'ai pas de requête devant moi mais quelque chose comme le code non testé suivant est ce que vous voulez:
la source
$query
objet est modifié (différemment de ce qui précède bien sûr) mais encore une fois, la requête SQL ne change pas!C'est ainsi que cela se fait dans views_query_alter; la partie node_access n'est pas nécessaire.
la source
Je me suis demandé que personne ne fournissait une vraie solution qui fonctionne. Il y a une telle méthode que j'ai trouvée ici , merci beaucoup à @ b-ravanbakhsh:
la source
Dans Drupal 8 et grâce à l'approche graceman9, ce sera:
la source