| Drupal

How to Use Relationships in Drupal 8

With the Views module, it is possible to fetch pieces of data from a Drupal entity and display them according to a specific format. The Views module acts as a query builder, which generates the SQL code, in charge of retrieving the data from the database.

T191128 drupal relationships he first setting when creating a view allows you to choose the base table from which the aforementioned data will be recovered.

When you choose Content as the base table, you also have to specify the Content type, so it will not be possible to retrieve data from other content types and present it within the view unless you set a Relationship between those content types.

This tutorial will explain the concept of Relationships in Views with a basic example. 

Let’s start!


Step #1. The Content Types

For this exampĺe, the content types we will be using are:

  • Author
  • Book

The fields for each one of them are detailed in the tables below:

Content type: Author

Field

Field type

Required

Allowed values

Author image

Image

yes

1

Date of Birth

Date 

yes

1

Date of Death

Date

no

1

Body

Text (formatted, long, with summary)

no

1

 

Content type: Book

Field

Field type

Required

Allowed values

Cover image

Image

yes

1

Year of publication

Number (integer)

yes

1

Author

Content (Reference)

yes

Unlimited

Body

Text (formatted, long, with summary)

no

1

 

Notice that the Author field in the Book Content type references the Author Content type. This is how Drupal knows that these nodes are related. It is set to receive unlimited values since a book can have one or many authors.

191128 drupal relationships 001 

After creating the content types, create some dummy content. Make sure that you create the Authors first, and then the Books. That way, you will always select an existing node to reference to.

191128 drupal relationships 002


 Step #2. - Create the View

  • Click Structure > Views > Add view
  • Name the view Book listing
  • Show Content of type Book
  • Choose to Create a page
  • Select Table as the Display format
  • Uncheck Use a pager
  • Click Save and Edit

191128 drupal relationships 003

  • Add the following fields in the FIELDS section:
    • Cover image
    • Author image
    • Body
  • Click Add and configure fields

191128 drupal relationships 004

 

  • Set the Image style to Thumbnail on both image fields
  • Link the Image to the Content on both image fields
  • Set the Body Formatter to Trimmed with a limit of 200
  • Click Apply three times

191128 drupal relationships 005

 

191128 drupal relationships 006 

  • Rearrange the fields in the following order:
    • Title
    • Cover image
    • Body
    • Author image

If you scroll down to see the preview, you will notice that the Author’s image is not displaying. That’s because it belongs to another content type. We need to set a Relationship to the image field on the Author Content type.  


Step #3. - Add a Relationship

  • Click the ADVANCED link on the right of the Interface.
  • Click Add in the RELATIONSHIPS option.

Feel free to take a look at all the fields from other tables to which is possible to relate the view to. 

  • Select Content referenced from field_book_author
  • Click Add and configure relationships
  • Check Require this relationship
  • Click Apply

  191128 drupal relationships 007

 

  • Click Content: Author image (Author image) in the FIELDS section

You will see a new dropdown option on top called Relationship. 

  • Select (field_book_author: Content)
  • Click Apply

191128 drupal relationships 008

 

  • Save the view and take a look at the created page.

191128 drupal relationships 009

 

Relationships in Drupal help the site-builder to create complex views, by using data from different tables and presenting them in a logical manner. 

I hope you liked this tutorial. Thanks for reading!

Check out our Drupal 8 video courses here.


About the author

Jorge lived in Ecuador and Germany. Now he is back to his homeland Colombia. He spends his time translating from English and German to Spanish. He enjoys playing with Drupal and other Open Source Content Management Systems and technologies.