Skip to content

Production Events Schema (drupal.org)

This diagram is read directly from config/sync/*.yml in the actual drupal.org site codebase (~/Sites/pl-drupalorg), not reconstructed from documentation. It reflects what drupal.org’s Events feature actually runs today.

erDiagram
  node { string label "Content (bundle: event)" }
  user { string label "User" }
  file { string label "File" }
  taxonomy_term { string label "Taxonomy term" }
  comment { string label "Comment" }
  group { string label "Group (community_group)" }
  group_relationship { string label "Group relationship" }

  node ||--o{ user : "field_event_speakers"
  node ||--o{ user : "field_event_volunteers"
  node ||--o{ user : "field_organizers"
  node ||--o| user : "field_code_of_conduct_contact"
  node ||--o{ node : "field_event_sponsors (sponsor nodes)"
  node ||--o| node : "og_group_ref (legacy OG field)"
  node ||--o| file : "field_event_logo_file"
  node ||--o| file : "field_event_cover_photo_file"
  node ||--o{ taxonomy_term : "field_group_tags"
  node ||--o{ comment : "comment_node_event"
  group_relationship }o--|| group : "gid"
  group_relationship }o--|| node : "entity_id (community_group-group_node-event)"

Events are a plain node bundle (event) — not a dedicated entity type. Field types worth knowing, not shown in full field-level detail above since they don’t shape the ERD:

  • field_event_speakers, field_event_volunteers, field_organizersuser references, unlimited cardinality.
  • field_event_sponsorsnode references (sponsors are modeled as content, not a dedicated entity).
  • field_event_address (Address module), field_date_of_event / field_date_of_call_for_papers / field_date_of_ticket_purchase_op (datetime), and field_event_status / field_event_type / field_event_format (single-select lists — status: proposed/cancelled/ etc.; type: drupalcamp/localmeetup/etc.; format: online/in_person) are plain fields, not references.
  • comment_node_event — comments are enabled on the Event bundle.

Same pattern as Production Group Schema’s node.section.group_group leftover:

  1. og_group_ref is a real entity_reference to node, but named for the classic Organic Groups (Drupal 7) field. The actual group attachment already happens through group_relationship_type: community_group-group_node-event (the real Group module mechanism), so this looks like a second, redundant, likely-legacy pointer sitting alongside the real one — worth checking whether anything still reads it.
  2. field_events_attended on user is typed list_string, not an entity_reference — despite the name implying a link to event nodes, it’s just free-form string values, not a real relationship. It’s omitted from the diagram above for that reason; flagging it here since the name easily reads as a proper reference.