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

201 阅读1分钟

在前面的项目里面添加两个模块

npx typeorm entity:create src/entity/Article
npx typeorm entity:create src/entity/Tag

执行成功后你会发现在项目里面多了两个文件夹

image.png

创建多对多的关系使用

  @JoinTable()
  @ManyToMany(() => Tag)

向artice和tag里面添加内容

import { Column, Entity, JoinTable, ManyToMany, PrimaryGeneratedColumn } from "typeorm";
import { Tag } from "./Tag";

@Entity()
export class Article {

  @PrimaryGeneratedColumn()
  id: number;

  @Column({
    length: 100,
    comment: '文章标题'
  })
  title: string;

  @Column({
    type: 'text',
    comment: '文章内容'
  })
  content: string;

  @JoinTable()
  @ManyToMany(() => Tag)
  tags: Tag[];
}
import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"

@Entity()
export class Tag {

    @PrimaryGeneratedColumn()
    id: number;

    @Column({
        length: 100
    })
    name: string;
}

加入dataSource

image.png 修改index.tsx

import { AppDataSource } from "./data-source";
import { Article } from "./entity/Article";
import { Tag } from "./entity/Tag";

AppDataSource.initialize().then(async () => {

  const a1 = new Article();
  a1.title = '演讲的本质';
  a1.content = '让思想更有影响力,抛弃演讲的套路,学会掌握自如,打动被人的影响力艺术';

  const a2 = new Article();
  a2.title = '山海经';
  a2.content = '这是一本富有科幻魅力的书,在书里记录了很多孩子们喜欢的小故事';

  const t1 = new Tag();
  t1.name = '已读';

  const t2 = new Tag();
  t2.name = '未读';

  const t3 = new Tag();
  t3.name = '已订阅';

  a1.tags = [t1, t2];
  a2.tags = [t1, t2, t3];

  const entityManager = AppDataSource.manager;

  await entityManager.save(t1);
  await entityManager.save(t2);
  await entityManager.save(t3);

  await entityManager.save(a1);
  await entityManager.save(a2);

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

执行npm run start

image.png

image.png

image.png

搜索用relations指定你要关联的数据表

const article = await entityManager.find(Article, {
    relations: {
        tags: true
    }
});

console.log(article);
console.log(article.map(item=> item.tags))

image.png

删除关联数据,先搜索到,然后进行筛选,最后保存即可。删除id为6的数据

const article = await entityManager.findOne(Article, {
    where: {
        id: 6
    },
    relations: {
        tags: true
    }
});

article.title = "ccccc";

article.tags = article.tags.filter(item => item.name.includes('ttt111'));

await entityManager.save(article);

执行npm run start

image.png

当然你也可以直接删除,我删除article里面id=1的数据

await entityManager.delete(Article, 1);

执行前长这样

image.png 执行后

image.png

image.png