前端全栈第二课:用typeorm向数据库添加数据---一对多关系

1.新建2个实体

js 复制代码
typeorm entity:create src/entity/Department 
typeorm entity:create src/entity/Employee

将他们加入datasource.ts

2.一对多的关系

一对一用的装饰器是:@OneToOne,那么多对一用的就是 @ManyToOne 装饰器。注意:是在多的一方使用 @ManyToOne(谁多谁用)

如下:

删除原来创建的两个表,然后重新执行npm run start

这个departmentId就是创建的外键。 加点数据试试看

结果如下

2.关联保存数据

和一对一一样使用cascade即可,此时index.ts文件里面对department的数据保存可以删除。

执行看看行不行?

执行npm run start你会发现department里面没有人员信息

那怎么添加人员信息?当然是department里面关联employee

前面在employee里面写的是@ManyToOne,现在在department里面写的是@OneToMany

在index.ts里面改改

js 复制代码
import { Department } from './entity/Department';
import { Employee } from './entity/Employee';
import { AppDataSource } from "./data-source";

AppDataSource.initialize().then(async () => {
  const e1 = new Employee();
  e1.name = '张三';

  const e2 = new Employee();
  e2.name = '李四';

  const e3 = new Employee();
  e3.name = '王五';

  const d1 = new Department();
  d1.name = '技术部';
  d1.employees = [e1, e2, e3];

  await AppDataSource.manager.save(Department, d1);
  const deps = await AppDataSource.manager.find(Department, {
    relations: {
      employees: true
    }
  });
  console.log(deps);
  console.log(deps.map(item => item.employees));

}).catch(error => console.log(error))

执行npm run start后变成

删除的时候,先把关联的 employee 删了,再删除 department:

js 复制代码
const deps = await AppDataSource.manager.find(Department, { relations: { employees: true } }); await AppDataSource.manager.delete(Employee, deps[0].employees); await AppDataSource.manager.delete(Department, deps[0].id);

如果你设置了 onDelete 为 SET NULL 或者 CASCADE: 那就不用自己删 employee 了,只要删了 department,mysql 会自动把关联的 employee 记录删除,或者是把它们的外键 id 置为空。

相关推荐
likuolei12 分钟前
XSL-FO 软件
java·开发语言·前端·数据库
正一品程序员13 分钟前
vue项目引入GoogleMap API进行网格区域圈选
前端·javascript·vue.js
j***894619 分钟前
spring-boot-starter和spring-boot-starter-web的关联
前端
star_111224 分钟前
Jenkins+nginx部署前端vue项目
前端·vue.js·jenkins
im_AMBER32 分钟前
Canvas架构手记 05 鼠标事件监听 | 原生事件封装 | ctx 结构化对象
前端·笔记·学习·架构
JIngJaneIL33 分钟前
农产品电商|基于SprinBoot+vue的农产品电商系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·农产品电商系统
Tongfront38 分钟前
前端通用submit方法
开发语言·前端·javascript·react
可爱又迷人的反派角色“yang”41 分钟前
LVS+Keepalived群集
linux·运维·服务器·前端·nginx·lvs
han_41 分钟前
前端高频面试题之CSS篇(二)
前端·css·面试
JIngJaneIL43 分钟前
书店销售|书屋|基于SprinBoot+vue书店销售管理设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·书店销售管理设计与实现