Для 7 был модуль.
Как в 9 посчитать у родительской сущности и вывести в поле количество "вложенных" сущностей.
Родитель:
- Ребёнок
- Ребёнок
- Ребёнок
- Количество детей
Для 7 был модуль.
Как в 9 посчитать у родительской сущности и вывести в поле количество "вложенных" сущностей.
Родитель:
- Ребёнок
- Ребёнок
- Ребёнок
- Количество детей
Комментарии
Вьюха с агрегацией?
думал, как вариант, но хотел что-то более простое и готовое )
Я делал кодом в hook_cron. У меня нет необходимости иметь всегда абсолютно точный счетчик, небольшое расхождение в течение суток вполне допустимо. Также не хотелось считать эти счетчики каждый раз "на лету", когда во вьюхе около ста записей, и для каждой надо посчитать количество ссылающихся, которых тоже могут быть сотни. Поэтому просто создал поле count и по крону два раза в сутки его заново пересчитываю.
Если нужно, чтобы счетчик обновлялся мгновенно, то нужно отслеживать хуками все создания, изменения и удаления записей.
Но это в любом случае не "простое и готовое"
Нет, мгновенное значение не нужно как раз таки.
Вот как-то так у меня:
* Implements hook_cron().
*/
function MYMODULE_cron() {
$ids = Drupal::entityQuery('taxonomy_term')
->condition('vid', 'tags')
->condition('status', 1)
->condition('default_langcode', 1)
->execute();
foreach ($ids as $id) {
$count = Drupal::entityQuery('node')
->condition('type', 'pictures')
->condition('status', '1')
->condition('default_langcode', 1)
->condition('field_picture_tags', $id)
->count()
->execute();
$entity = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($id);
if ($entity->field_picture_count->value != ($count?$count:NULL)) {
$entity->field_picture_count->value = $count ?: NULL;
$entity->save();
}
}
$ids = Drupal::entityQuery('node')
->condition('type', 'cities')
->condition('status', 1)
->condition('default_langcode', 1)
->execute();
foreach ($ids as $id) {
$count = Drupal::entityQuery('node')
->condition('type', 'artefacts')
->condition('status', '1')
->condition('default_langcode', 1)
->condition('field_city', $id)
->count()
->execute();
$entity = \Drupal::entityTypeManager()->getStorage('node')->load($id);
if ($entity->field_artefact_count->value != ($count ?: NULL)) {
$entity->field_artefact_count->value = $count ?: NULL;
$entity->save();
}
}
}
Благодарю, буду пробовать.