前言:
- 这一步会学习用到关系(relation),一对多(has many)关系,属于(belong to)关系
- 还是基于 《loopback4入坑记录(二)**》中创建的基本项目之上
- 由于当时vs的terminal拉的比较小,横向部分有的内容缺失(项目名称、输入的命令),但是不影响
- 项目目录为appnew ,它在app就截没了。以至于后面 lb4 xxx命令未显示,请注意
- 每一项选的内容可以从截图中看到
第1步:添加TodoList模型 (model)
lb4 model
第2步:添加TodoList存储库 (repository)
lb4 repository
补充:
图中文件,增加图中方法
第3步:添加TodoList与Todo的关系 (relation)
因为关系对应着两个model所以要来两次
3.1 添加HasMany关系
lb4 relation
3.2添加belongsTo关系
lb4 relation
3.3更新db.json中的数据
{
"ids": {
"Todo": 5,
"TodoList": 3
},
"models": {
"Todo": {
"1": "{\"title\":\"Take over the galaxy\",\"desc\":\"MWAHAHAHAHAHAHAHAHAHAHAHAHAMWAHAHAHAHAHAHAHAHAHAHAHAHA\",\"todoListId\":1,\"id\":1}",
"2": "{\"title\":\"destroy alderaan\",\"desc\":\"Make sure there are no survivors left!\",\"todoListId\":1,\"id\":2}",
"3": "{\"title\":\"play space invaders\",\"desc\":\"Become the very best!\",\"todoListId\":2,\"id\":3}",
"4": "{\"title\":\"crush rebel scum\",\"desc\":\"Every.Last.One.\",\"todoListId\":1,\"id\":4}"
},
"TodoList": {
"1": "{\"title\":\"Sith lord's check list\",\"color\":\"blue\",\"id\":1}",
"2": "{\"title\":\"My daily chores\",\"color\":\"red\",\"id\":2}"
}
}
}
3.4 改动两个xxx.model文件
3.4.1 src/models/todo.model.ts
3.4.1 src/model/todo-list.model.ts
第4步:添加TodoList控制器 (controller)
4.1 命令添加
lb4 controller
4.2 改动文件
4.2.1 src/controllers/todo-list.controller.ts
该文件第1处
该文件第2处
4.2.2 src/controllers/todo.controller.ts
注意这里面不仅仅改动了@getxxxx ,还改动了find方法为findTodos方法
该文件第1处
该文件第2处
4.2.3 优化文件
todo-todo-list.controller.ts中一个方法,移入到todo.controller.ts中,并删除todo-todo-list.controller.ts,
todo.controller.ts移入后,第204会飘红,因为没有TodoList这个泛型,需要在顶部导入
导入TodoList
第5步:重启服务并测试
运行正常
测试如下,使用postman工具
db.json中的结果(其他的内容,是之前测试的,无关紧要)
补充-添加 TodoListImage 模型及relation
这是一个hasOne关系
1.创建TodoListImage模型
lb4 model
2.创建TodoListImage存储库
lb4 repository
3.创建TodoListImage控制器
lb4 controller
4.创建TodoListImage关系
4.1 hasOne
lb4 relation
4.2 belongsTo
lb4 relation
5.优化文件
5.1 复制todo-list-image-todo-list.controller.ts 中的方法
到 todo-list-image.controller.ts中
并在todo-list-image.controller.ts 导入TodoList
总结
-
lb4直接使用lb4 relation 就能建立两个model之间的关系,但是需要两次,并且指定source model,和 target model。
-
@注解用法不一定是固定的, @get(’/todos’)==》 @get(’/todos’, { responses: { }}) 也是可行的
-
model 不仅能通过@property来声明属性,还可以用@belongsTo @hasMany来声明关系,并指明与之关联的model
-
还需要删除 src/controller/index.ts中框选部分,因为这两个文件已经被删除,不然后期会出现报错提示