综合使用示例
本文将以一个经典的“博客网站”为例,实现发表文章、展示文章列表、查看文章详情、点赞和发送通知等功能,展示数据的查询、创建和修改操作。在此过程中,将涉及数据的各个环节:
开始搭建
数据模型设计
为了实现博客网站的功能,需要设计以下数据模型:
- post 表:用于保存博客文章,包含
title
、content
、author_account
、published_status
、show_at
、like_count
等字段。一个账户可以发表多篇文章,因此 account 表与 post 表是一对多的关系,通过author_account
字段进行关联。 - notification 表:用于保存通知,包含
sender_account
、receiver_account
、message
等字段。account 表通过sender_account
和receiver_account
字段与 notification 表建立两次一对多关系,分别表示发送者和接收者。从整体来看,account 表与 notification 表是多对多的关系。更多关联相关的内容,请参考数据模型 - 关联 。
创建数据 - 发表一篇新文章
当用户想要创建一篇新文章时,我们需要将用户输入的内容存入数据库。
- 页面设计:创建一个”写作”页面,包含标题输入框、正文的富文本编辑器等组件。
- 行为配置:在”添加”按钮上配置一个”添加 post”行为。
- 数据映射:将输入组件的值逐一映射到
post
数据表的相应字段(title
、content
等)。author_account
字段则绑定当前用户数据中的ID
。
读取数据 - 展示文章列表
在进行数据操作时,往往需要对数据进行筛选、排序、去重等处理:
- 过滤:通过设置一个或多个条件来筛选需要的数据。例如,要想只获取已发布的博客,可设置条件:
published_status = true
。 - 排序:定义数据的显示顺序。例如,按
show_at
字段降序排列,实现最新文章置顶。若字段已开启向量化存储,还可实现高级的语义相关性排序。 - 去重:当需要不重复的数据时,可指定一个或多个字段,确保返回结果的唯一性。例如,去除
title
字段重复的数据。 - 数据限额:控制返回记录的数量。
1
表示获取单条记录,大于1
则获取一个数组。
排序字段的顺序必须与去重一致。
在博客网站项目中,继续进行以下操作:
- 绑定数据源:在主页添加一个”列表”组件,将其数据源设置为
post
表。 - 配置查询:利用前面提到的查询配置,添加过滤条件
published_status = true
,只获取已发布的文章;设置按show_at
降序排序,让最新的文章置顶。 - 渲染列表:将列表项中的标题、封面图等组件绑定到当前项数据(
item
)的title
和cover_image
等字段上。
数据读取 - 查看单篇文章详情
展示数据传递与数据使用的协同工作。
- 声明参数:新建”详情页”,并声明一个路径参数:
post_id
。 - 设置参数:在文章列表的每个列表项上配置”页面跳转”行为。在跳转时,将当前项数据的
id
赋值给post_id
,将其传递给”详情页”。 - 使用参数:在”详情页”中添加数据源,设置一个关键的过滤条件:
id
等于路径参数的post_id
。同时将数据限额设为1
。 - 展示内容:通过这个精确的查询,详情页就能展示特定文章的所有内容了。
更新数据 - 点赞与发送通知
此步骤演示了如何修改现有数据,并执行一连串的自动化操作。
- 配置点赞行为:在文章详情页的”点赞”按钮上配置一个”更新 post”行为。
- 指定目标:设置筛选条件为
id
等于当前项数据的id
,这是至关重要的一步,确保只更新正确的记录。 - 执行更新:将
like_count
字段的值更新为like_count + 1
。
- 指定目标:设置筛选条件为
- 链式操作:发送通知:在点赞行为成功后,紧接着添加第二个行为——“添加 notification”,向
notification
(通知)表中写入一条新数据。 - 使用上下文数据:通知的内容可以动态生成,例如,发送者
sender_account
是当前用户数据中的 ID,接收者receiver_account
为当前项数据的author_account
,而消息内容message
则由上一步的结果数据中的内容拼接生成。
注意事项
- 数据请求类型:除了普通的”查询”,Zion 还支持”订阅”,它能让数据在发生变化时自动推送到前端,非常适合用于开发实时聊天等功能。
- 安全警告:在执行”更新”或”删除”操作时,务必仔细检查过滤条件是否精确。一个疏忽可能导致整张表的数据被错误地修改或清空。
- 数据处理:对于返回的数组数据,可以使用
GET_ITEM
等公式进行处理和提取。
Last updated on