为什么NestJS/TypeORM在保存时删除我的传入属性?



我是Nest JS的新手,并试图设置我的第一个项目来使用它。但是我有两个实体:组织和用户。我有它正确地为组织工作,但是当我尝试创建一个用户时,我得到organizationId为NULL,无法保存。

这是我的实体

import { User } from "src/modules/user/entities/user.entity";
import { IOrganization } from "../interfaces/organization.interface";
import { Column, CreateDateColumn, Entity, PrimaryColumn, UpdateDateColumn, OneToMany } from "typeorm";
@Entity()
export class Organization implements IOrganization {
@PrimaryColumn()
id: string
@Column({ nullable: false })
name: string
@OneToMany(() => User, (user) => user.organization)
users: User[]
@CreateDateColumn()
createdAt: Date
@UpdateDateColumn()
updatedAt: Date
}
import { Organization } from "src/modules/organization/entities/organization.entity";
import { Column, CreateDateColumn, Entity, PrimaryColumn, UpdateDateColumn, ManyToOne, JoinColumn } from "typeorm";
import { Role } from "../enums/user.enum";
@Entity()
export class User {
@PrimaryColumn()
id: string
@ManyToOne(() => Organization, (organization) => organization.users, {
nullable: false,
})
@JoinColumn({ name: "organizationId" })
organization: Organization
@Column({ unique: true, nullable: false })
email: string

@Column ({
type: "enum",
enum: Role,
default: Role.USER,
nullable: false,
})
role: Role
@Column({ nullable: false })
name: string
@CreateDateColumn()
createdAt: Date
@UpdateDateColumn()
updatedAt: Date
}

下一个是我的用户模块

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserService } from './user.service';
import { UserController } from './user.controller';
import { User } from './entities/user.entity';
import { OrganizationService } from '../organization/organization.service';
@Module({
imports: [TypeOrmModule.forFeature([User])],
controllers: [UserController],
providers: [UserService],
})
export class UserModule {}

这是我的用户控制器

import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { Roles } from 'src/decorators/roles.decorator';
import { AuthGuard } from '@nestjs/passport';
@Controller('user')
export class UserController {
constructor(private readonly userService: UserService) {}
@Post()
@UseGuards(AuthGuard('jwt'))
@Roles('admin')
create(@Body() createUserDto: CreateUserDto) {
return this.userService.create(createUserDto);
}
@Get()
@UseGuards(AuthGuard('jwt'))
@Roles('admin', 'broker', 'assistant')
findAll() {
return this.userService.findAll();
}
@Get(':id')
@UseGuards(AuthGuard('jwt'))
@Roles('admin', 'broker', 'assistant')
findOne(@Param('id') id: string) {
return this.userService.findOne(+id);
}
@Patch(':id')
@UseGuards(AuthGuard('jwt'))
@Roles('admin', 'broker', 'assistant')
update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) {
return this.userService.update(+id, updateUserDto);
}
@Delete(':id')
@UseGuards(AuthGuard('jwt'))
@Roles('admin')
remove(@Param('id') id: string) {
return this.userService.remove(+id);
}
}

这是我的用户服务

import { Repository } from 'typeorm';
import { Inject, Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './entities/user.entity';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { IUser } from './interfaces/user.interface';
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private userRepository: Repository<User>,
) {}
async create(createUserDto: CreateUserDto): Promise<IUser> {
console.log('Created User DTO: ', createUserDto);
const createdUser = this.userRepository.create(createUserDto);
console.log('Created User: ', createdUser);
return await this.userRepository.save(createdUser);
}
findAll() {
return `This action returns all user`;
}
findOne(id: number) {
return `This action returns a #${id} user`;
}
update(id: number, updateUserDto: UpdateUserDto) {
return `This action updates a #${id} user`;
}
remove(id: number) {
return `This action removes a #${id} user`;
}
}

当我点击创建端点时,控制台记录的内容如下:

Created User DTO:  {
id: '6104ac51c617d0d6eb',
organizationId: '4LYTspbph',
email: 'test@test.com',
role: 'admin',
name: 'test name'
}
Per - First response tried that solution and get this with same error message.
Created User:  User {
id: '6104ac51c617d0d6eb',
organizationId: '4LYTspbph',
email: 'test@test.com',
role: 'admin',
name: 'test name'
}

然后在postgres数据库中插入,返回如下:

query failed: INSERT INTO "user"("id", "email", "role", "name", "createdAt", "updatedAt", "organizationId") VALUES ($1, $2, $3, $4, DEFAULT, DEFAULT, DEFAULT) RETURNING "role", "createdAt", "updatedAt" -- PARAMETERS: ["6104ac51c617d0d6eb","test@test.com","admin","test name"] error: error: null value in column "organizationId" of relation "user" violates not-null constraint

我不知道为什么要从传递给函数的数据中删除organizationId。有人能帮帮我吗?这必须是简单的。

我试过导入组织模块,并在构造函数中导入一个新的存储库,但也会出错。我试过在用户模块的forFeature导入中添加组织。

@ManyToOne(() => Organization, (organization) => organization.users, {
nullable: false,
})
@JoinColumn({ name: "organizationId" })
organization: Organization

这里组织是一个实体,并且typeform不允许您插入ID,而您需要插入整个数据。试试这个-

async create(createUserDto: CreateUserDto): Promise<IUser> {
console.log('Created User DTO: ', createUserDto);
const create = this.userRepository.create(createUserDto);
return await this.userRepository.save(create);
}

最新更新