Estoy usando Vistas 7.x-3.6 e intenté alterar la GROUP BY
cláusula con hook_views_query_alter()
lo siguiente:
function mymodule_views_query_alter(&$view, &$query) {
if ($view->name == "view_name"){
$query->add_groupby('field_name');
dpm($query);
}
}
Cuando miro $query
, la groupby
cláusula está habilitada correctamente pero la consulta SQL no se ve afectada : la GROUP BY
cláusula no aparece:
Lo que eventualmente hice fue usar un hook Drupal core ( hook_query_alter()
) y funcionó bien: el SQL ahora está afectado.
function mymodule_query_alter(QueryAlterableInterface $query) {
$view_name = 'view_name';
if ($query->hasTag('views_' . $view_name)) {
$query->groupBy('field_name');
}
}
¿Alguna razón por la cual mi hook_views_query_alter()
no funciona? Me pregunto si hay una forma más limpia de hacerlo y.
nid
con group by. No es necesario para mi. ¿Alguna otra opción? ¿Sabes cómo agregar consultas únicas en vistas?views_handler_filter::query()
feria. Trate$query->distinct();
enhook_query_alter
Tarde a la fiesta, pero esto podría ayudar a alguien más.
En mi caso, estaba proporcionando una lista de usuarios (usando el módulo adicional Profile2) con un campo Término de taxonomía ( https://drupal.org/node/1808320 ). Estaba viendo múltiples resultados de los que no podía deshacerme a través de la API de Views 3.
En mi módulo personalizado agregué:
Los parámetros para add_field son
fuente
Si aún enfrenta declaraciones innecesarias de GROUP BY agregadas a la consulta, puede eliminarlas
hook_query_alter()
. Resolví el problema ordenando comentarios de la mayoría de los comentarios de padres comentados, por ejemplo.Entonces en
hook_views_query_alter()
tengo:Recibí un error relacionado con la incapacidad de agrupar por
campo que en realidad es el resultado de la
COUNT()
función SQL .Terminé con esto:
fuente
Si observa la documentación de hook_views_query_alter , creo que la consulta ya está preparada para ejecutarse. Por ejemplo, la API de la base de datos ha realizado reemplazos y está a punto de enviarse por cable a MySQL. Otro ejemplo del uso de hook_views_query_alter se puede ver en el blog BTMash .
Siendo este el caso, ya no tiene un objeto de consulta de base de datos, sino las partes de la instrucción SQL con expresiones, variables, etc. como una matriz.
No tengo una consulta frente a mí, pero algo como el siguiente código no probado es lo que quieres:
fuente
$query
objeto está alterado (de forma diferente a la anterior, por supuesto), pero de nuevo, ¡la consulta SQL no cambia!Así se hace en views_query_alter; la parte de node_access no es necesaria.
fuente
Me preguntaba que nadie proporcionaba una solución real que simplemente funcionara. Hay uno de esos métodos que he encontrado aquí , muchas gracias a @ b-ravanbakhsh:
fuente
En Drupal 8 y gracias al enfoque graceman9, será:
fuente