无法使用 TypeORM 和 mysql 在 NestJs 中设置一对一关系

问题描述 投票:0回答:1

在我的嵌套应用程序中,我有两个表UsersProfession我想在这两个表之间创建OneToOne关系。 下面的代码演示了我如何实现它,但它只将数据保存在一个表中,即Users,而不是Profession表中。

用户.entity.ts

import { Column, CreateDateColumn, Entity, JoinColumn, OneToOne, 
PrimaryGeneratedColumn } from "typeorm";
import { Profession } from "./profession.entity";

@Entity({name:'users'})
export class User {

  @PrimaryGeneratedColumn({type: 'bigint'})
  id: number;

  @Column()
  firstName: string;

  @Column()
  lastName: string;

  @Column({ default: true })
  isActive: boolean;

  @CreateDateColumn()
  createdAt: Date

  @OneToOne(() => Profession, (prof) => prof.user,{cascade:true})
  @JoinColumn()
  profession: Profession
}

专业.实体.ts

import { IsNotEmpty, IsInt } from "class-validator";
import { Column, Entity, OneToOne, PrimaryGeneratedColumn } from "typeorm";
import { User } from "./user.entity";

@Entity({name:'profession'})
export class Profession{

  @PrimaryGeneratedColumn()
  id:number;

  @IsNotEmpty({message:"Please enter job type."})
  @Column()
  job_type:string;

  @IsNotEmpty({message:"Please enter experience."})
  @IsInt({message:"Invalid type"})
  @Column()
  experience: number;

  @OneToOne(() => User,(use) => use.profession)
  user:User;
}

创建用户.dto.ts

import { IsBoolean, IsNotEmpty, IsString } from "class-validator";
import { ProfessionDto } from "./profession.dto";

export class CreateUserDto {

  @IsNotEmpty({message:"Please enter first name."})
  @IsString(({message:"Please enter valid first name."}))
  firstName:string;


  @IsNotEmpty({message:"Please enter last name."})
  @IsString(({message:"Please enter valid last name."}))
  lastName:string;

  @IsBoolean({message:"Value is not valid."})
  isActive:boolean;

  profession:ProfessionDto;
}

专业.dto.ts

import { IsNotEmpty } from "class-validator";

export class ProfessionDto {

  id:number;

  @IsNotEmpty({message:"Please enter job type."})
  job_type:string;

  @IsNotEmpty({message:"Please enter experience."})
  experience:number;
}

用户.controller.ts

import { Controller, Post, Body, UsePipes, ValidationPipe } from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { ProfessionDto } from './dto/profession.dto';

@Controller('/api')
export class UserController {
  constructor(private readonly userService: UserService) {}

@Post('/addUser')
@UsePipes(ValidationPipe)
 create(@Body() createUserDto: CreateUserDto) {
  return this.userService.create(createUserDto);
 }
}

用户.service.ts

import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './entities/user.entity';
import { Repository } from 'typeorm';

@Injectable()
export class UserService {

constructor(
 @InjectRepository(User)
 private userRepository:Repository<User>,
){}

 async create(createUserDto: CreateUserDto) {

 let addUser = await this.userRepository.create(createUserDto);
 let data = await this.userRepository.insert(addUser); 
 return {message:"User added successfully"};
 }
}

现在,Users 表已填充,但 Profession 表为空。

下面是我在邮递员中发出 POST 请求:

我无法弄清楚我在代码中到底做错了什么。任何帮助将不胜感激。

javascript mysql node.js nestjs typeorm
1个回答
0
投票

您可以尝试使用

save()
方法代替
create()
,按照官方文档: 类型ORM一对一

© www.soinside.com 2019 - 2024. All rights reserved.