¿Cuál es la forma más sostenible de obtener información agregada sobre los campos?


12

EntityFieldQuery no está destinado a ser utilizado para ejecutar funciones agregadas (SUM, AVG, etc.) en datos de campo porque es independiente de SQL. Dicho esto, tales operaciones legítimamente necesitan ejecutarse de vez en cuando. De acuerdo con la función SQL con EntityFieldQuery y especialmente EntityFieldQuery y cómo usar las funciones agregadas SUM, ARG y MAX , las consultas SQL deben usarse, y ese enfoque se adapta mejor a mi caso de uso. Ayer estaba hablando con @chx y me recomendó usar un par de funciones internas para encontrar el nombre del campo y el nombre de la columna. Me pregunto si esto es sostenible y si es apropiado hacerlo en una base de código que podría lanzar a otros.

Si es la mejor manera, entonces es la mejor manera. Simplemente no quiero hacerlo antes de estar absolutamente seguro porque se siente desordenado.


Por ahora, acabo de usar las funciones internas ( _field_sql_storage_tablename($field)y _field_sql_storage_columnname($field_name, $column), que se ajustan a mis necesidades actuales, pero no es sostenible, por lo que todavía estoy interesado en una respuesta a esta pregunta si llega.
wizonesolutions

Respuestas:


2

El módulo de campo Ver le permite exponer tablas de campo como tablas base a las vistas. Esto difiere del comportamiento predeterminado de Vistas en que la tabla base es la tabla de campo y no una entidad desde la cual se cargan los datos del campo. Por ejemplo, al seleccionar el nodo como tabla base, puede agregar campos, pero el primario (tabla base) en la consulta sigue siendo un nodo que, según sus datos, puede arruinar las funciones agregadas (también conocida como una relación de muchos a uno campos al nodo).

El campo Vistas le permite acceder directamente a las tablas de campos, lo que significa que las funciones agregadas funcionan correctamente. Además, si necesita hacer uniones "interesantes" a otras tablas de campo, puede controlarlas completamente usando lo siguiente.

/**
 * Implements hook_views_data_alter().
 */
function mymodule_views_data_alter(&$data) {
  views_field_add_multi_join($data, /* see docs */);
}

Es bastante simple de usar y le permite realizar funciones agregadas en varias tablas de campo a la vez. Luego puede invocar manualmente una vista $view->execute()y extraer los resultados de la vista. Hay ejemplos de esto en la documentación de vistas.

Los beneficios de este enfoque sobre EntityFieldQuery es que puede administrar el proceso en Vistas (que casi todos ya estarán usando) y permitirle realizar la construcción de consultas físicas de manera menos directa, lo que ayuda a elevar la posible rotura en el camino. Además, muchas veces querrá mostrar dichos datos agregados en una pantalla de administración que luego puede usar la vista para proporcionar una visualización y acceder a los resultados en código para fines adicionales.


Voy a tener que ver esto. Podría intercambiar ese código en mis campos calculados en lugar de hacer la consulta manualmente. Probablemente trabajaré en el sitio donde necesito esto pronto e informaré en algún momento. Si funciona, lo aceptaré.
wizonesolutions

0

¿Se podría hacer esto en un módulo adicional para las vistas? Maneja las consultas muy bien y algunos resultados se publican con funciones agregadas, como en acciones cuando los filtros contextuales fallan, donde puede predeterminar todos los valores y dar recuentos de los resultados disponibles en cada uno. Las funciones para las consultas deberían estar allí, pero se necesitaría un formulario de interfaz de usuario para ello. Avísame si esto tiene sentido. Estoy empezando a diseccionar puntos de vista y estoy especulando.


COUNT consultas se pueden ejecutar en entidades, por lo que está resuelto. Estoy más interesado en SUM yo mismo. views_calc puede proporcionar información, pero quiero usar el valor en un campo calculado ... que bien podría hacer con views_get_view_result (o similar). Sin embargo, obtener Vistas para generar esa consulta en primer lugar es el truco. Parece que la forma hackeada podría ser la mejor. Creo que comenzaré con eso porque si no lo libero, seré dorado. Si lo hago, alguien enviará un parche.
wizonesolutions
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.