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.
_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.Respuestas:
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.
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.
fuente
¿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.
fuente