- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在多对多关系中保存数据?
(用户,书籍(MTM))
这是用户和书籍之间的多对多关系。
我的服务不正确。
另外,我的代码不起作用。
数据存储在 book 表中。
我需要你的帮助,一切
先感谢您。
我的堆栈 => NestJs、TypeORM、MySQL
有我的实体。
enter image description here
用户实体
@Entity('User')
export class User {
@PrimaryGeneratedColumn()
id!: number;
@Column()
real_name!: string;
@Column()
nick_name!: string;
@Column()
@IsEmail()
email!: string;
@Column()
password!: string;
@Column()
phone_number!: string;
@Column()
image_url: string;
@BeforeInsert()
async hashPassword() {
this.password = await argon2.hash(this.password, {type: argon2.argon2id, hashLength: 40});
}
}
书本实体
@Entity('Book')
export class Book {
@PrimaryGeneratedColumn()
id!: number;
@Column()
title: string;
@Column()
image_url: string;
@Column()
contents: string;
@Column({ type: 'datetime'})
datetime: string;
@ManyToMany(() => User)
@JoinTable()
users: User[];
}
book.controller.ts
@UseGuards(JwtAuthGuard)
@Post('bpc')
savebpc(@Req() req: any, @Query('title') bookTitle: string){
return this.BookService.addBpc(req, bookTitle);
}
书.service.ts
async addBpc(req: any, bookTitle: string): Promise<any>{
const userId = req.user.id;
const bookId = await getRepository('Book')
.createQueryBuilder('book')
.where({title:bookTitle})
.getRawOne()
if (!bookId){
throw new NotFoundException('Not_found_book');
}
const user = await getRepository('User')
.createQueryBuilder('user')
.where({id: userId})
.getRawOne()
//bookId.user.push(user);
//await this.bookRepository.save(bookId);
let userdata = new User();
userdata.id = user.user_id;
userdata.real_name = user.user_real_name;
userdata.nick_name = user.user_nick_name;
userdata.email = user.user_email;
userdata.password = user.user_password;
userdata.image_url = user.user_image_url;
console.log(userdata);
let bookBpc = new Book();
bookBpc.title = bookId.book_title;
bookBpc.image_url = bookId.book_image_url;
bookBpc.contents = bookId.book_contents;
bookBpc.datetime = bookId.book_datetime;
bookBpc.users = [user];
console.log(bookBpc);
await this.bookRepository.create([bookBpc]);
return 'suceess';
}
最佳答案
您需要在 user 和 book 中添加 manytomany 关系,这是一个使用 express 和 typeorm 的示例,但它与 nestjs 相同
用户实体:
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column({ type: 'varchar', nullable: false, unique: true })
username: string;
// we need to add a default password and get it form the .env file
@Column({ type: 'varchar', nullable: true, default: '' })
password: string;
@Column({ type: 'varchar', nullable: true })
firstname: string;
@Column({ type: 'varchar', nullable: true })
lastname: string;
@Column({ type: 'varchar', nullable: false })
email: string;
@Column({ type: 'boolean', nullable: true, default: false })
connected: boolean;
@CreateDateColumn({ name: 'created_at' })
createdAt: Date;
@UpdateDateColumn({ name: 'updated_at' })
updatedAt: Date;
// new properties
@Column({ name: 'login_attempts', type: 'int', default: 0, nullable: true })
loginAttempts: number;
@Column({ name: 'lock_until', type: 'bigint', default: 0, nullable: true })
lockUntil: number;
//Many-to-many relation with role
@ManyToMany((type) => Role, {
cascade: true,
})
@JoinTable({
name: "users_roles",
joinColumn: { name: "userId", referencedColumnName: "id" },
inverseJoinColumn: { name: "roleId" }
})
roles: Role[];
}
角色实体:
@Entity()
export class Role {
@PrimaryGeneratedColumn()
id: number;
@Column({ type: 'varchar', nullable: false, unique: true })
profile: string;
@Column({ type: 'varchar', nullable: false })
description: string;
//Many-to-many relation with user
@ManyToMany((type) => User, (user) => user.roles)
users: User[];
@CreateDateColumn({ name: 'created_at' })
createdAt: Date;
@UpdateDateColumn({ name: 'updated_at' })
updatedAt: Date;
}
这是在 user_role 中保存数据的方法:
let entity = await this.userRepository.create(data); //here you create new dataobject that contain user columns
let entity2 = { ...entity, roles: data.selectedRoles } // you have to add the association roles here
const user = await this.userRepository.save(entity2);
关于mysql - 如何创建如何在typeorm中创建多对多关系,[NestJS],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66881061/
我知道 typeorm 可以创建整个 db 模式,甚至可以将数据库模式与实体定义同步(请参阅 synchronize 中的 Connection Options ) 但在生产中,我想要求 typeor
我有一个 Role Entity 和一个 Route Entity,它们是树形结构,它们是 ManyToMany 关系。 现在我想通过 RoleRepository.find({relations:
我已经设置了 logging: true当createConnection()来自 TypeORM ,在大多数情况下都可以正常工作。 但是有一种情况,我的数据字段之一来自特定的 query/mutat
在 Rails 上,每个测试用例都会创建一个 ActiveRecord 事务,它允许测试所有内容,然后将数据库恢复到原始状态,而不必删除所有表或任何可能影响播种机等的内容。 可以在 Typeorm 上
Note 与 Subject 具有多对多关系 查询它的最佳方式是什么?我喜欢编写以下内容来获取给定注释上的所有主题: const subjectRepo = connection.getRepos
我使用 UUID 作为我的实体的主键,它工作得很好。但我想删除那些破折号。 现在 ID 被保存为 8e5365f4-3d42-4274-bafc-93b97bd6e3f2 36 个字符 我想要的是 8
我一整天都在尝试将实体保存到 MySQL 数据库中,遇到了巨大的困难。我正在使用 NestJS 和 TypeORM。 teacher.entity.ts import { BeforeInsert,
我也想在前端使用我用 TypeORM 创建的实体。有没有一种干净的方法可以做到这一点?或者我应该继续这样做。 此时,我的文件结构如下所示(前端的 Angular 8): /server /enti
我想得到一个 basic setup使用 TypeORM 工作,并在设置后收到此错误。 这是一个 REPL(只需执行 yarn install && yarn db:dev 后跟 yarn db:mi
我正在尝试通过 Nest/TypeORM 构建 SAAS 产品,我需要按子域配置/更改数据库连接。 customer1.domain.com => connect to customer1 datab
如何将 TypeORM 与 Better-sqlite3 一起使用? 上官方documentation ,有一个section形式更好-sqlite3。 我已经通过 typeorm@latest 安装
操作系统:macOS Sierra v 10.12.6 我正在尝试使用 typeorm 在 Typescript 中构建一个应用程序,这是我第一次使用其中任何一个。 我使用了以下两种方法来安装 typ
有没有一种简单的方法可以使用 DataSource 在 typeORM v.0.3.6 中播种数据? typeorm-seeding 似乎使用已弃用的 Connection。 最佳答案 找到这个包裹
我正在做一门类(class),我们使用 express-node postgres 和 react(使用 typescript)和 typeORM。到目前为止一切都运行良好,但我面临 typeORM
尽管进行了大量研究和反复试验,但不幸的是,我还没有针对以下用例的完美解决方案:一个用户有多个帖子,这被正确地实现为一对多关系。我想为用户加载他的所有帖子,但不是帖子的所有属性,只有某些属性。 方法 1
我用 NestJS 和 ORM TypeORM 做一个 API 我有实体: 用户 关系类型 UserRelationshipType(带有用户和关系类型 ForeignKey) 和关系(与 userR
我有两个实体 Tag 和 Photo: // tag.entity.ts import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm
我有以下要保存的实体: @Entity('approvals') export class Approval { @PrimaryGeneratedColumn() id: string;
我有命令: .leftJoinAndSelect("permission.user", "user") .where("permissi
我是使用 typeorm 的新手,这是我第二次与 typeorm 混淆,我有以下查询: SELECT t1.a,t1.b,t2.a (SELECT TOP 1 t1.a FROM table1
我是一名优秀的程序员,十分优秀!