3: Relaties
Het CMS modelleert drie relatie types, die allemaal als velden zijn gedeclareerd en automatisch zijn afgeleid van het schema.
| Type | Betekenis | Voorbeeld |
|---|---|---|
parent |
behoort-tot-één | een artikel heeft één auteur |
child |
heeft-veel | een auteur heeft veel artikelen |
many |
veel-op-veel | een artikel heeft veel onderwerpen |
3.1: Ouder en kind
Een parent-veld slaat de id van de gerelateerde rij op en lost op naar het gerelateerde model wanneer je het leest:
// on article
author: field (type: 'parent', obj: 'author', title: 'Author', required: true)
category: field (type: 'parent', obj: 'category', title: 'Category')
// on author, the reverse side
articles: field (type: 'child', obj: 'article', title: 'Articles')
De kolomconventie is belangrijk. De foreign-key kolom is genoemd naar de korte naam van het gerelateerde model, niet <name>_id. Dus de auteur van een artikel wordt opgeslagen in een kolom genaamd author, en de child lookup van de auteur leest articles.author. Noem het bovenliggende veld overeenkomstig: author, niet author_id.
3.2: Veel-op-veel
Een many veld gebruikt een join-tabel:
topics: field (type: 'many', obj: 'topic', table: 'article_topic', title: 'Topics')
De kolommen van de join-tabel hebben standaard de twee korte namen: article_topic(article, topic). Standaard worden de gerelateerde rijen als alleen-lezen weergegeven; markeer het veld create/change om een checkbox-picker weer te geven, zodat de set kan worden bewerkt in de aanmaak- en bewerkingsformulieren.
3.3: Lezen van relaties
Eenmaal gedeclareerd, zijn relaties gewone property-lezingen: $article->author is het auteurmodel, $article->author->name is de naam, en kindertellingen (12 Comments) verschijnen automatisch in lijstweergaven. Geen join SQL in je app-code.