首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有外键约束的TypeORM QueryBuilder Insert Insert表

问带有外键约束的TypeORM QueryBuilder Insert Insert表
EN

Stack Overflow用户
提问于 2021-04-01 06:35:11
回答 1查看 1.2K关注 0票数 2

我有两个表-组织和部门。departments表在organizationId列上具有组织的外键约束。显然,对于这两个表,我还有很多其他的外键关系。这只是一个用例。

在两个表上执行select语句可以很好地工作:

代码语言:javascript
复制
import "reflect-metadata";
import {createConnection} from "typeorm";
import {getConnection} from "typeorm";
import {Departments} from "./entity/Departments"

createConnection().then(async connection => {

    //get total estimated hours by month
    const departments = await getConnection()
        .createQueryBuilder( "Departments", "d")
        .innerJoinAndSelect("organizations", "o", "d.organizationId = o.organizationId")
        .select("organizationName, departmentName ")
        .where("d.organizationId = :organizationId", {organizationId: 2})
        .getRawMany();
    //  .getSql();

    console.log("Departments: ", departments);
}).catch(error => console.log(error));

当我尝试使用QueryBuilder插入部门时,organizationId未被识别为有效列:

代码语言:javascript
复制
import "reflect-metadata";
import {createConnection} from "typeorm";
import {getConnection} from "typeorm";
import {Departments} from "./entity/Departments"

createConnection().then(async connection => {

    //get total estimated hours by month
    await getConnection()
        .createQueryBuilder()
        .insert()
        .into(Departments)
        .values([
            { departmentName: "Test Product", organizationId: 2}
            ])
        .execute();
    //  .getSql();

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

以下是组织和部门的实体代码:

Organizations.ts -

代码语言:javascript
复制
import {
  Column,
  Entity,
  Index,
  OneToMany,
  PrimaryGeneratedColumn,
} from "typeorm";
import { Departments } from "./Departments";
import { Groups } from "./Groups";
import { IntegrationDetails } from "./IntegrationDetails";
import { Jobcodes } from "./Jobcodes";
import { JobMaster } from "./JobMaster";
import { Locations } from "./Locations";
import { Phases } from "./Phases";
import { RoadmapActualCostDetails } from "./RoadmapActualCostDetails";
import { RoadmapEstimatedCostDetails } from "./RoadmapEstimatedCostDetails";
import { RoadmapEstimates } from "./RoadmapEstimates";
import { RoadmapTemplates } from "./RoadmapTemplates";
import { Strategies } from "./Strategies";
import { Teammates } from "./Teammates";

@Index("organizations_organizationId_index", ["organizationId"], {})
@Index("organizations_pk", ["organizationId"], { unique: true })
@Entity("organizations", { schema: "dbo" })
export class Organizations {
  @PrimaryGeneratedColumn({ type: "int", name: "organizationId" })
  organizationId: number;

  @Column("varchar", { name: "organizationName", length: 100 })
  organizationName: string;

  @Column("varchar", { name: "orgShortName", length: 50 })
  orgShortName: string;

  @OneToMany(() => Departments, (departments) => departments.organization)
  departments: Departments[];

  @OneToMany(() => Groups, (groups) => groups.organization)
  groups: Groups[];

  @OneToMany(
    () => IntegrationDetails,
    (integrationDetails) => integrationDetails.organization
  )
  integrationDetails: IntegrationDetails[];

  @OneToMany(() => Jobcodes, (jobcodes) => jobcodes.organization)
  jobcodes: Jobcodes[];

  @OneToMany(() => JobMaster, (jobMaster) => jobMaster.organization)
  jobMasters: JobMaster[];

  @OneToMany(() => Locations, (locations) => locations.organization)
  locations: Locations[];

  @OneToMany(() => Phases, (phases) => phases.organization)
  phases: Phases[];

  @OneToMany(
    () => RoadmapActualCostDetails,
    (roadmapActualCostDetails) => roadmapActualCostDetails.organization
  )
  roadmapActualCostDetails: RoadmapActualCostDetails[];

  @OneToMany(
    () => RoadmapEstimatedCostDetails,
    (roadmapEstimatedCostDetails) => roadmapEstimatedCostDetails.organization
  )
  roadmapEstimatedCostDetails: RoadmapEstimatedCostDetails[];

  @OneToMany(
    () => RoadmapEstimates,
    (roadmapEstimates) => roadmapEstimates.organization
  )
  roadmapEstimates: RoadmapEstimates[];

  @OneToMany(
    () => RoadmapTemplates,
    (roadmapTemplates) => roadmapTemplates.organization
  )
  roadmapTemplates: RoadmapTemplates[];

  @OneToMany(() => Strategies, (strategies) => strategies.organization)
  strategies: Strategies[];

  @OneToMany(() => Teammates, (teammates) => teammates.organization)
  teammates: Teammates[];
}

Departments.ts

代码语言:javascript
复制
export class Departments {
  @PrimaryGeneratedColumn({ type: "int", name: "departmentId" })
  departmentId: number;

  @Column("nvarchar", { name: "departmentName", length: 100 })
  departmentName: string;

  @Column("int", { name: "ownerId", nullable: true })
  ownerId: number | null;

  @ManyToOne(() => Organizations, (organizations) => organizations.departments)
  @JoinColumn([
    { name: "organizationId", referencedColumnName: "organizationId" },
  ])
  organization: Organizations;

  @ManyToOne(() => Departments, (departments) => departments.departments)
  @JoinColumn([{ name: "parentId", referencedColumnName: "departmentId" }])
  parent: Departments;

  @OneToMany(() => Departments, (departments) => departments.parent)
  departments: Departments[];

  @OneToMany(() => Products, (products) => products.department)
  products: Products[];

  @ManyToMany(() => Programs, (programs) => programs.departments)
  @JoinTable({
    name: "programs_departments",
    joinColumns: [
      { name: "departmentId", referencedColumnName: "departmentId" },
    ],
    inverseJoinColumns: [
      { name: "programId", referencedColumnName: "programId" },
    ],
    schema: "dbo",
  })
  programs: Programs[];

  @OneToMany(() => Roadmaps, (roadmaps) => roadmaps.department)
  roadmaps: Roadmaps[];
}
EN

回答 1

Stack Overflow用户

发布于 2021-04-02 06:55:51

不要紧--我想通了。即使在实体文件中正确定义了列关系,仍然需要添加@ ManyToOne引用。

@Column("int",{ name:"organizationId“}) organizationId:编号;

与此相关- Typeorm insert with relationId

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66896167

复制
相关文章

相似问题

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