可以在没有主键的情况下在联结 table 上删除或更新
Possible to DELETE or UPDATE on junction table w/ no primary key
我有一个名为 PlanConflicts
的联结 table,它允许计划和冲突之间存在多对多关系。
这是我的模型定义:
import { AllowNull, Column, DataType, ForeignKey, Model, Table } from "sequelize-typescript";
import Conflict from "./Conflict";
import Plan from "./Plan";
@Table({ tableName: "PlanConflicts" })
export default class PlanConflict extends Model<PlanConflict> {
@AllowNull(false)
@ForeignKey(() => Plan)
@Column(DataType.INTEGER)
public planId: number;
@AllowNull(false)
@ForeignKey(() => Conflict)
@Column(DataType.INTEGER)
public conflictId: number;
}
这是我尝试使用结语为此 table 生成端点:
epilogue.resource({
model: PlanConflict,
endpoints: ["/plan-conflicts", "/plan-conflicts/:id"],
pagination: false,
search: [
{
operator: "$eq",
param: "plan-id",
attributes: [ "planId" ]
},
{
operator: "$eq",
param: "conflict-id",
attributes: [ "conflictId" ]
}
]
});
我可以创建新的冲突,并且可以使用 http://localhost:3000/plan-conflicts?plan-id=9&conflict-id=1
形式的 URL 获取列表,但我不知道如何执行更新或删除。 Epilogue 的搜索功能仅适用于列表。
所以,我想知道是否可以更新或删除没有主键的联结 table 的项目,如果可以,如何更新或删除。
经过几个小时的休息后,我突然意识到我可能只能将端点从 .../:id
自定义为 .../:planId/:conflictId
并且果然成功了。
我的资源调用现在简化为:
epilogue.resource({
model: PlanConflict,
endpoints: ["/plan-conflicts", "/plan-conflicts/:planId/:conflictId"],
pagination: false,
});
这是一个例子 URL:http://localhost:3000/plan-conflicts/9/1
我有一个名为 PlanConflicts
的联结 table,它允许计划和冲突之间存在多对多关系。
这是我的模型定义:
import { AllowNull, Column, DataType, ForeignKey, Model, Table } from "sequelize-typescript";
import Conflict from "./Conflict";
import Plan from "./Plan";
@Table({ tableName: "PlanConflicts" })
export default class PlanConflict extends Model<PlanConflict> {
@AllowNull(false)
@ForeignKey(() => Plan)
@Column(DataType.INTEGER)
public planId: number;
@AllowNull(false)
@ForeignKey(() => Conflict)
@Column(DataType.INTEGER)
public conflictId: number;
}
这是我尝试使用结语为此 table 生成端点:
epilogue.resource({
model: PlanConflict,
endpoints: ["/plan-conflicts", "/plan-conflicts/:id"],
pagination: false,
search: [
{
operator: "$eq",
param: "plan-id",
attributes: [ "planId" ]
},
{
operator: "$eq",
param: "conflict-id",
attributes: [ "conflictId" ]
}
]
});
我可以创建新的冲突,并且可以使用 http://localhost:3000/plan-conflicts?plan-id=9&conflict-id=1
形式的 URL 获取列表,但我不知道如何执行更新或删除。 Epilogue 的搜索功能仅适用于列表。
所以,我想知道是否可以更新或删除没有主键的联结 table 的项目,如果可以,如何更新或删除。
经过几个小时的休息后,我突然意识到我可能只能将端点从 .../:id
自定义为 .../:planId/:conflictId
并且果然成功了。
我的资源调用现在简化为:
epilogue.resource({
model: PlanConflict,
endpoints: ["/plan-conflicts", "/plan-conflicts/:planId/:conflictId"],
pagination: false,
});
这是一个例子 URL:http://localhost:3000/plan-conflicts/9/1