Project.model.ts
import { DataTypes, Model, CreationOptional, InferCreationAttributes, InferAttributes, BelongsToManyGetAssociationsMixin, BelongsToManySetAssociationsMixin, BelongsToManyAddAssociationsMixin } from 'sequelize';
import sequelize from '../../loaders/db'; // config of sequelize
import Manager from '../manager/manager.model';
const tableName = 'project';
export interface ProjectModel extends Model<InferAttributes<ProjectModel>, InferCreationAttributes<ProjectModel>> {
id: CreationOptional<number>;
name: string;
managerId: number | null;
}
const Project = sequelize().define<ProjectModel>(
tableName,
{
id: {
type: DataTypes.UUID,
primaryKey: true,
defaultValue: DataTypes.UUIDV4,
},
name: {
type: DataTypes.STRING(100),
allowNull: false,
},
managerId: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: Manager, // Reference Manager model
key: 'id',
},
field: 'conformance_id',
},
},
{
timestamps: false,
}
);
export default Project;
字符串
Page.model.ts
import { DataTypes, Model, CreationOptional, InferCreationAttributes, InferAttributes, BelongsToManyGetAssociationsMixin, BelongsToManySetAssociationsMixin, BelongsToManyAddAssociationsMixin } from 'sequelize';
import sequelize from '../../loaders/db'; // config of sequelize
import Project from '../project/project.model';
const tableName = 'page';
export interface PageModel extends Model<InferAttributes<PageModel>, InferCreationAttributes<PageModel>> {
id: CreationOptional<number>;
projectId: number; // Foreign key to link with the Project model
name: string;
}
const Page = sequelize().define<PageModel>(
tableName,
{
id: {
type: DataTypes.UUID,
primaryKey: true,
defaultValue: DataTypes.UUIDV4,
},
projectId: {
type: DataTypes.UUID,
allowNull: false,
references: {
model: Project, // Reference Project model
key: 'id',
},
field: 'project_id'
},
name: {
type: DataTypes.STRING(50),
allowNull: true,
field: 'name'
},
},
{
timestamps: false,
}
);
export default Page;
型
Manager.model.ts
import { DataTypes, Model, CreationOptional, InferCreationAttributes, InferAttributes, BelongsToManyGetAssociationsMixin, BelongsToManySetAssociationsMixin, BelongsToManyAddAssociationsMixin } from 'sequelize';
import sequelize from '../../loaders/db'; // config of sequelize
const tableName = 'manager';
export interface ManagerModel extends Model<InferAttributes<ManagerModel>, InferCreationAttributes<ManagerModel>> {
id: CreationOptional<number>;
level: string; // Foreign key to link with the Project model
name: string;
}
const Manager = sequelize().define<ManagerModel>(
tableName,
{
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
level: {
type: DataTypes.STRING(10),
allowNull: false,
},
name: {
type: DataTypes.STRING(50),
allowNull: true,
field: 'name'
},
},
{
timestamps: false,
}
);
export default Manager;
型
Project.service.ts
import { Service } from 'typedi';
import Project from './project.model';
@Service()
export default class ProjectService {
async getProjectById(id: string) {
try {
const project = await Project.findOne({
where: { id },
// remaining part of the query to get manager and page details using any operator
});
if (!project) {
throw new Error('Project not found');
}
return project;
} catch (error) {
throw new Error('Failed to fetch Project by ID');
}
}
}
型
我是新来的这个Sequelize。现在我不知道什么样的查询,我必须添加项目。findOne()方法。我需要从经理表和页面数组与该项目相关联的经理名称。提前感谢您的帮助和时间。
1条答案
按热度按时间5f0d552i1#
下面是一个(未经测试的)示例,使用
include
指定关联的模型(Manager和Page)沿着要包含在结果中的属性。因此,这应该会获取一个项目以及Manager的名称和关联页面的数组。字符串