即使使用`incepl:[{model:this.buildmodel,requirce:true}]
我没有解决这个问题的线索。即使我认为做出了正确的迁移,模型定义和查询,我也无法在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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
根据文档使用“关联”而不是“模型”的钥匙。
必需:True
也可能不必要。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.