Який найбільш стійкий спосіб отримати сукупну інформацію про поля?


12

EntityFieldQuery не призначений для використання для запуску сукупних функцій (SUM, AVG тощо) на польових даних, тому що це SQL-агностик. Однак, такі операції законно потрібно проводити час від часу. Відповідно до функції SQL з EntityFieldQuery і особливо EntityFieldQuery, а також як використовувати сукупні функції SUM, ARG та MAX , потрібно використовувати SQL запити, і цей підхід найкраще відповідає моєму випадку використання. Я вчора розмовляв з @chx, і він рекомендував використовувати пару внутрішніх функцій, щоб знайти ім'я поля та назву стовпця. Мені просто цікаво, чи є це стійким і чи доречно це робити в кодовій базі, яку я можу випустити в otehrs.

Якщо це найкращий спосіб, то це найкращий спосіб. Я просто не хочу робити це до того, як я абсолютно впевнений, тому що це безладдя.


Наразі я тільки що використовував внутрішні функції ( _field_sql_storage_tablename($field)і _field_sql_storage_columnname($field_name, $column), які відповідають моїм поточним потребам, але це не є стійким, тому все ж зацікавлений у відповіді на це питання, чи варто прийти.
wizonesolutions

Відповіді:


2

Модуль поля Перегляд дозволяє виставляти таблиці полів як базові таблиці переглядам. Це відрізняється від Перегляди поведінку по замовчуванням в тому , що базова таблиця є таблицею поле , а не об'єкт , до якого дані поля потім завантажуються з. Наприклад, вибираючи вузол як базову таблицю, ви можете потім додавати поля, але основним (базовою таблицею) у запиті все ще є вузол, який залежно від ваших даних може виконувати сукупність функцій (так, як співвідношення "багато в одному" деяких поля до вузла).

Поле Views дозволяє вам отримати прямий доступ до таблиць полів, а це означає, що агреговані функції працюють належним чином. Крім того, якщо вам потрібно зробити "цікаві" приєднання до інших польових таблиць, ви можете повністю керувати ними, використовуючи наступне.

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

Це досить просто у використанні і дозволяє вам виконувати агреговані функції в декількох польових таблицях одночасно. Потім можна вручну викликати вигляд $view->execute()і витягнути результати з подання. Приклади цього є в документації щодо перегляду.

Переваги такого підходу над EntityFieldQuery полягають у тому, що ви можете керувати процесом у Views (який майже всі вже використовуватимуть) та дозволяти йому виконувати побудову фізичного запиту менш прямим способом, що допомагає підвищити можливий злом в дорозі. Крім того, багато разів вам потрібно буде відображати такі сукупні дані на екрані адміністратора, який ви можете потім використовувати для подання як відображення, так і доступу до результатів у коді для додаткових цілей.


Мені доведеться це перевірити. Я міг поміняти цей код на свої обчислені поля, замість того, щоб робити запит вручну. Я, мабуть, буду працювати над сайтом, де мені це потрібно незабаром, і в якийсь момент докладу звіт. Якщо це спрацює, я прийму.
wizonesolutions

0

Чи можна це зробити в додатковому модулі для переглядів? Він дуже добре обробляє запити, а деякі результати публікуються за допомогою сукупних функцій, таких як дії, коли контекстні фільтри виходять з ладу, де він може за замовчуванням застосовувати всі значення та давати підрахунок доступних результатів у кожному. Функції для запитів повинні бути там, але для цього потрібна форма користувальницького інтерфейсу. Дайте мені знати, чи це має сенс. Я тільки починаю розбирати погляди і міркую.


COUNT запити можуть бути запущені на об’єктах, тому це вирішено. Мене більше цікавить СУМ. views_calc може дати зрозуміти, але я хочу використовувати значення в обчислюваному полі ..., що я міг би зробити з views_get_view_result (або подібним). Однак, в першу чергу отримати Views для створення цього запиту. Здається, що хакізський спосіб може бути найкращим. Я думаю, я почну з цього, тому що якщо я не випущу, я буду золотим. Якщо я це зробити, хтось, сподіваємось, подасть виправлення
wizonesolutions
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.