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.

We gebruiken essentiële cookies om deze site te laten werken. Met uw toestemming gebruiken we ook analytics om de site te verbeteren.