Easy-to-follow video tutorials help you learn software, creative, and business skills.Become a member
Now we come to one of the hardest concepts in all of Drupaldom, Relationships. As with Arguments, I'll only be able to give you a peek into the vast world of possibilities made available by employing Relationships. Our first task is to understand what relationships are and at base, what they give you. Let's get a little conceptual background first by returning to some slides we saw back in the video, Planning Your Data Structure. You might remember that we decided to make multiple tables so that instead of storing all personal information in one place, since we have three people in the same household, it made more sense to store that household information only once in a separate table which labels it as such and then make a relationship between the two.
In our example, we have Mimi de Nada living in Household 0001, then we have a separate Household table that shows exactly where that household is. One table relates to another. This is the essence of a relational database such as that which Drupal is built on. So what does that mean in Drupal? Quite a lot actually. We'll understand a bit by looking at a Node in Drupal, and then looking at how that node is constructed actually behind the scenes in the database. We'll go to this Dani de Nada Node by clicking on her picture and then we click on Edit.
As you scroll down, you see that there is a headshot associated with this node. Actually nodes can only hold textual data in the their database. Remember the database that's running this doesn't hold graphics. Those are stored as separate files in your Drupal installation. So how exactly is that managed? Let's go to the database and take a look. First, I go up to the URL to see that this is actually node 15. I switch over to my database and go down to the node table. Now I'm about to start discussing the various tables that run in Drupal. Don't worry if you don't know where to find the information. I'm just going to quickly run through to make a point.
We clicked on this little Browse icon to take a look at what's in that node table and scroll down until we find node 15 and there in fact is Dani de Nada's node. If we look through all of the things that are stored in that node table though, there is actually no reference at all to any kind of graphic. We are scrolling up to the top so we can see exactly what these ids are. There is a reference to the node itself obviously. That's what called the primary key. It's what identifies the node in this table. The Version id, which says what the latest version is since we haven't don't any versioning. It's the same as the node id. Also the User id. It says who exactly created that node.
So once again, where is that graphic? As it happens, it's in a completely different table called content_type_ person. We click on that and scroll down a bit and here we see all the fields. Go to that fields headshot and actually even there, we don't see a graphic. We only see a reference to another table. That one in fact is stored in the files table and there is the file path to our actual file. If we scroll down to the correct file id, we could find it in here. You'd have to do all of this manually and in fact, your computer has to put all of that together manually.
It does it very quickly because it's the sort of information a computer manages well. However, it does take some processing power. Drupal protects you from most of this complexity, but then Views exposes some of it to you again. That's most obvious when you create a CCK field that's either a node reference or a user reference. You might remember that we did that in our Person View in the Married to column. That node reference field actually only pulls over one piece of information, the node id, which is a numerical value that Drupal uses to display the Node's title.
It does that in part because it wants to avoid all of that extra processing complexity that it would have to do to bring over all of the pieces of information. Drupal assumes that all that you need is that title since you are making a simple reference, then you could click through to get more information. We can see that by going back to Drupal, going back to our homepage and clicking through. We know that Dani de Nada is married to Eli de Nada. We click through and then we can start working with Eli's record. But what if you want to get more information/ If for example you wanted to connect the two birthdays or something like that? You have to explicitly tell Drupal that that's what you want. We do that by setting up a Relationship.
Let's return to that view that we setup to show that front-page that lists all of the People. I'll go down to the View, up to the little ghost menu and click on Edit. Because I clicked on Edit from the page, it takes me to the Page display. I want to change the Defaults, so I click on the Defaults display above. In order to set up that relationship and show the spouse's date of birth, we have to create a relationship here. You click on Add next to Relationships and scroll down. The relationship will be between one person and the person that they are married to, so the relationship at base is between the married couple, this Content: Married to field. Click on Add and I'll leave that Label. This Label only appears to the Administrator. It doesn't appear anywhere that the user sees, so it's good to keep something that is verbose. It won't get in your way in the site itself. And we'll click on Update.
Now that didn't change our View at all, but it gives us additional capabilities. We are going to add a field. We see not only Name, Headshot, Date of birth and Married to, but after Married to will be spouse's date of birth. We go up here to Fields and add a field, scroll down to Date of birth, scroll down a little further so that we can see our buttons and add it. I'll leave all of these alone with one exception. We now have this pop-up relationship, which lists all of the relationships that we created. This is the one we just created, so we select it and click Update.
Now we have that new column. I'm going to change it just a little bit more and change the title to Spouse's date of birth and move it to be next to the person that they are married to. I do that by going up to the Field and clicking on it, scrolling down so I can see what I'm doing, change the Label to be Custom and it becomes Spouse's date of birth and click on Update. That looks better and finally, I'll move it by going up to Rearrange and drag it where to I want it. Update and Save.
Let's go back to the View one more time just to take a quick look at something. You will notice in this list of fields, these all simply list the kind of field that's showing and then next to the one we created a relationship to, it has this parenthesis next to it. That's a way that you can tell which fields are using a Relationship and which ones are direct to the node that's actually being used. Again, scrolling down to the View and taking a preview, this Dani de Nada, the Headshot, the Date of birth, all of these other fields are primary to that node. The one that's coming in from an outside table, an outside data source, is this Spouse's date of birth.
There is your introduction to Relationships. As I said, it's a big subject and Drupal administrators have done some absolutely fascinating things with them and we are not going to leave it there. In the video Going Further with Relationships, you will learn how to put Relationships to a greater use than you've seen here. We are going to setup some family events for our fictional de Nada family and use Relationships to show who is planning to attend each of those events.
Get unlimited access to all courses for just $25/month.Become a member
Access exercise files from a button right under the course name.
Search within course videos and transcripts, and jump right to the results.
Remove icons showing you already watched videos if you want to start over.
Make the video wide, narrow, full-screen, or pop the player out of the page into its own window.
Click on text in the transcript to jump to that spot in the video. As the video plays, the relevant spot in the transcript will be highlighted.