3: 关系
CMS 模型三种关系类型,均作为字段声明,并且都自动从模式中派生。
| 类型 | 意义 | 示例 |
|---|---|---|
parent |
属于一个 | 一篇文章有一个作者 |
child |
有多个 | 一个作者有多篇文章 |
many |
多对多 | 一篇文章有多个主题 |
3.1: 父母和孩子
parent 字段存储相关行的 ID,并在读取时解析为相关模型:
// 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')
列的约定很重要。 外键列的名称应以相关模型的简短名称命名,而不是 <name>_id。因此,文章的作者存储在名为 author 的列中,作者的 child 查找为 articles.author。将父字段命名为匹配:author,而不是 author_id。
3.2: 多对多
一个 many 字段使用连接表:
topics: field (type: 'many', obj: 'topic', table: 'article_topic', title: 'Topics')
连接表的列默认为两个短名称:article_topic(article, topic)。默认情况下,相关行显示为只读;标记字段 create/change 以渲染复选框选择器,以便在创建和编辑表单上可以编辑该集合。
3.3: 读取关系
一旦声明,关系就是普通的属性读取:$article->author 是作者模型,$article->author->name 是作者的名字,子计数(12 Comments)会自动出现在列表视图中。您的应用代码中不需要任何连接 SQL。