Relationships
11. Relationships
When to Use
When you need to access fields from related entities (entity references, users, taxonomy terms, etc.) or apply filters/sorts on related entity data.
Relationship Configuration
Basic Relationship
relationships:
uid:
id: uid
table: node_field_data
field: uid # Entity reference field
relationship: none # Parent relationship (or 'none')
entity_type: node
entity_field: uid
plugin_id: standard # Relationship plugin
admin_label: 'author' # Admin UI label
required: false # INNER JOIN (true) or LEFT JOIN (false)
Reference: core/modules/views/config/schema/views.data_types.schema.yml lines 866-883
Required vs Optional
required: true→ INNER JOIN → Only rows with relationship presentrequired: false→ LEFT JOIN → All rows, related data if available
Common Relationship Patterns
Author Relationship (Node → User)
relationships:
uid:
id: uid
table: node_field_data
field: uid
admin_label: 'author'
plugin_id: standard
required: true
Then use author fields:
fields:
name:
id: name
table: users_field_data
field: name
relationship: uid # References relationship ID
plugin_id: field
label: 'Author Name'
Reference: core/modules/node/config/optional/views.view.content.yml lines 633-640
Entity Reference Field Relationship
relationships:
field_tags:
id: field_tags
table: node__field_tags
field: field_tags_target_id
admin_label: 'field_tags: Taxonomy term'
plugin_id: standard
required: false
Reverse Relationships (Referenced Entity → Referencing)
relationships:
reverse__node__field_tags:
id: reverse__node__field_tags
table: taxonomy_term_field_data
field: reverse__node__field_tags
admin_label: 'Nodes referencing this term'
plugin_id: entity_reverse
required: false
Used when base table is taxonomy_term_field_data and you want fields from nodes that reference those terms.
Pattern
Node view with author name from relationship:
display:
default:
display_options:
relationships:
uid:
id: uid
table: node_field_data
field: uid
admin_label: 'author'
plugin_id: standard
required: true
fields:
title:
id: title
table: node_field_data
field: title
plugin_id: field
name:
id: name
table: users_field_data
field: name
relationship: uid # Uses author relationship
plugin_id: field
label: 'Author'
filters:
status_1:
id: status_1
table: users_field_data
field: status
relationship: uid # Filter on author status
value: '1'
plugin_id: boolean
Chained Relationships
relationships:
uid:
id: uid
table: node_field_data
field: uid
admin_label: 'author'
plugin_id: standard
required: false
user_picture:
id: user_picture
table: user__user_picture
field: user_picture
relationship: uid # Chain off author relationship
admin_label: 'author picture'
plugin_id: standard
required: false
Common Mistakes
- Using
required: truewhen relationship might not exist → Results disappear unexpectedly; use LEFT JOIN unless you specifically want to exclude rows - Chaining relationships incorrectly → Child relationship must reference parent relationship ID in
relationshipkey - Not setting
admin_label→ Generic labels in UI make debugging hard; always use descriptive admin labels - Forgetting to set
relationshipon fields/filters → Field comes from base table instead of related entity - Circular relationship references → Views doesn't detect this; leads to invalid queries
- Overusing relationships → Each relationship is a JOIN; performance degrades with many JOINs
See Also
- Section 8: Fields Configuration — using relationship fields
- Section 9: Filters & Exposed Filters — filtering on relationship data
- Section 16: Query Settings — DISTINCT to handle multiple relationship matches