【问题标题】:Possible to DELETE or UPDATE on junction table w/ no primary key可以在没有主键的联结表上删除或更新
【发布时间】:2017-07-10 12:15:50
【问题描述】:

我有一个名为PlanConflicts 的联结表,它允许计划和冲突之间的多对多关系。

这是我的模型定义:

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;
}

这是我尝试使用结语为该表生成端点:

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&amp;conflict-id=1 形式的 URL 获取列表,但我不知道如何执行更新或删除。结语的搜索功能仅适用于列表。

所以,我想知道是否可以更新或删除没有主键的联结表的项目,如果可以,如何。

【问题讨论】:

    标签: node.js rest typescript sequelize.js epilogue


    【解决方案1】:

    经过几个小时的休息后,我突然意识到,我或许可以将端点从 .../:id 自定义为 .../:planId/:conflictId,果然成功了。

    我的资源调用现在简化为:

    epilogue.resource({
        model: PlanConflict,
        endpoints: ["/plan-conflicts", "/plan-conflicts/:planId/:conflictId"],
        pagination: false,
    });
    

    这是一个示例 URL:http://localhost:3000/plan-conflicts/9/1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      相关资源
      最近更新 更多