首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeORM关系

TypeORM关系
EN

Stack Overflow用户
提问于 2022-08-09 00:06:55
回答 1查看 177关注 0票数 0

我试图避免执行第二次查询来保存带有关系的行。用户可以创建多个事件。任何用户都将通过auth,我可以访问userID。我不完全理解人际关系。看起来,我应该能够在链接到用户ID的类型编号上建立关系,而不是整个用户对象。

实体是

代码语言:javascript
复制
import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  JoinColumn,
  ManyToOne,
} from 'typeorm';
import { User } from './User';

@Entity()
export class Event {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  eventName: string;


  @ManyToOne(() => User)
  @JoinColumn()
  createdBy: User;
}

export default Event;

主计长

代码语言:javascript
复制
const userRepository = AppDB.getRepository(User);
const EventRepository = AppDB.getRepository(Event);

export async function addEvent(userID: number, eventObject: EventObject) {
  const u = await userRepository.findOneByOrFail({ id: userID }); //Trying to Remove <---
  const e = new Event();
  Object.assign(e, eventObject);
  e.eventStart = new Date(eventObject.eventStart);
  e.eventEnd = new Date(eventObject.eventEnd);
  e.createdBy = u; //e.createBy = userID. <----
  await EventRepository.save(e);
  return e;
}
EN

回答 1

Stack Overflow用户

发布于 2022-08-09 05:03:48

目前,我无法测试这一点,但是我这样做:您可以为JoinColumn添加一个名称,并添加一个具有这个确切名称的列。这样,您就不需要获得实体,并且只需设置id即可。

代码语言:javascript
复制
@ManyToOne(() => User)
  @JoinColumn({name: 'createdById')
  createdBy: User;

  @Column()
  createdById: number; // use the type of the User's entity primary key
代码语言:javascript
复制
const EventRepository = AppDB.getRepository(Event);

export async function addEvent(userID: number, eventObject: EventObject) {
  const e = new Event();
  Object.assign(e, eventObject);
  e.eventStart = new Date(eventObject.eventStart);
  e.eventEnd = new Date(eventObject.eventEnd);
  e.createdById = userID;
  await EventRepository.save(e);
  return e;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73285235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档