即使使用`incepl:[{model:this.buildmodel,requirce:true}]

发布于 2025-02-07 18:32:33 字数 2959 浏览 3 评论 0原文

我没有解决这个问题的线索。即使我认为做出了正确的迁移,模型定义和查询,我也无法在build中获得迭代

这是模型:

sequelizebuildmodel.ts

@Table({
  tableName: 'playablebuild',
  underscored: true,
})
export class SequelizeBuildModel extends Model<
  BuildModelAttributes,
  BuildModelCreationAttributes
> {
  public id!: number;

  ...

  @HasMany(() => SequelizeIterationModel)
  public iterations!: SequelizeIterationModel[];

  ...
}

sequelizeiterationModel.ts

import {
  BelongsTo,
  Column,
  ForeignKey,
  Model,
  Table,
} from 'sequelize-typescript';
import { SequelizeBuildModel } from './SequelizeBuildModel';
import { DataTypes, Optional } from 'sequelize';

export interface IterationModelAttributes {
  id: number;
  buildId: number;
  config: Record<string, unknown>;
}

export type IterationModelCreationAttributes = Optional<
  IterationModelAttributes,
  'id'
>;

@Table({
  tableName: 'iteration',
  underscored: true,
})
export class SequelizeIterationModel extends Model<
  IterationModelAttributes,
  IterationModelCreationAttributes
> {
  @BelongsTo(() => SequelizeBuildModel, { foreignKey: 'build_id' })
  public build!: SequelizeBuildModel;

  @ForeignKey(() => SequelizeBuildModel)
  @Column
  public buildId!: number;

  @Column({ type: DataTypes.JSONB })
  public config!: Record<string, unknown>;
}

这是查询:

sequelizeiteRationRepository

import { Iteration } from '../../../domain/entities/Iteration';
import { IterationRepository } from '../../../domain/ports/IterationRepository';
import {
  IterationModelCreationAttributes,
  SequelizeIterationModel,
} from '../models/SequelizeIterationModel';
import { InjectModel } from '@infra';
import { IterationMapper } from '../mappers/IterationMapper';
import { SequelizeBuildModel } from '../models/SequelizeBuildModel';

export class SequelizeIterationRepository implements IterationRepository {
  constructor(
    @InjectModel('SequelizeIterationModel')
    private readonly iterationModel: typeof SequelizeIterationModel,
    @InjectModel('SequelizeBuildModel')
    private readonly buildModel: typeof SequelizeBuildModel,
  ) {}

  public async save(iteration: Iteration): Promise<Iteration> {
    const parsedIteration = IterationMapper.toPersistence(iteration);
    return this.create(parsedIteration);
  }

  private async create(
    iteration: IterationModelCreationAttributes,
  ): Promise<Iteration> {
    const rawIteration = await this.iterationModel.create(iteration, {
      include: [{ model: this.buildModel, required: true }],
    });
    return IterationMapper.toDomain(rawIteration);
  }
}

我专门针对这些行,其中>原始无论如何要保持空洞:

      include: [{ model: this.buildModel, required: true }],
    });

当我在数据库内部看时,据我所知,关系和外国是正确的。

I am out of clues to solve this issue. Even though I believe to have made a correct migration, model definition and query, I can't get the build in my iteration.

Here is the models :

SequelizeBuildModel.ts

@Table({
  tableName: 'playablebuild',
  underscored: true,
})
export class SequelizeBuildModel extends Model<
  BuildModelAttributes,
  BuildModelCreationAttributes
> {
  public id!: number;

  ...

  @HasMany(() => SequelizeIterationModel)
  public iterations!: SequelizeIterationModel[];

  ...
}

SequelizeIterationModel.ts

import {
  BelongsTo,
  Column,
  ForeignKey,
  Model,
  Table,
} from 'sequelize-typescript';
import { SequelizeBuildModel } from './SequelizeBuildModel';
import { DataTypes, Optional } from 'sequelize';

export interface IterationModelAttributes {
  id: number;
  buildId: number;
  config: Record<string, unknown>;
}

export type IterationModelCreationAttributes = Optional<
  IterationModelAttributes,
  'id'
>;

@Table({
  tableName: 'iteration',
  underscored: true,
})
export class SequelizeIterationModel extends Model<
  IterationModelAttributes,
  IterationModelCreationAttributes
> {
  @BelongsTo(() => SequelizeBuildModel, { foreignKey: 'build_id' })
  public build!: SequelizeBuildModel;

  @ForeignKey(() => SequelizeBuildModel)
  @Column
  public buildId!: number;

  @Column({ type: DataTypes.JSONB })
  public config!: Record<string, unknown>;
}

Here is the query :

SequelizeIterationRepository

import { Iteration } from '../../../domain/entities/Iteration';
import { IterationRepository } from '../../../domain/ports/IterationRepository';
import {
  IterationModelCreationAttributes,
  SequelizeIterationModel,
} from '../models/SequelizeIterationModel';
import { InjectModel } from '@infra';
import { IterationMapper } from '../mappers/IterationMapper';
import { SequelizeBuildModel } from '../models/SequelizeBuildModel';

export class SequelizeIterationRepository implements IterationRepository {
  constructor(
    @InjectModel('SequelizeIterationModel')
    private readonly iterationModel: typeof SequelizeIterationModel,
    @InjectModel('SequelizeBuildModel')
    private readonly buildModel: typeof SequelizeBuildModel,
  ) {}

  public async save(iteration: Iteration): Promise<Iteration> {
    const parsedIteration = IterationMapper.toPersistence(iteration);
    return this.create(parsedIteration);
  }

  private async create(
    iteration: IterationModelCreationAttributes,
  ): Promise<Iteration> {
    const rawIteration = await this.iterationModel.create(iteration, {
      include: [{ model: this.buildModel, required: true }],
    });
    return IterationMapper.toDomain(rawIteration);
  }
}

I am specifically focusing on those line, where rawIteration stays empty no matter what :

      include: [{ model: this.buildModel, required: true }],
    });

When I am looking inside the DB, the relationship and foreign are corrects as far as I can see.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情绪 2025-02-14 18:32:33

According to the Documentation it appears that you want to use a key of 'association' instead of 'model'. The required: true is also likely to be unnecessary.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文