【问题标题】:How to match unique key and foreign key in include instead of primary key and foreign key in Sequelize如何匹配包含中的唯一键和外键而不是Sequelize中的主键和外键
【发布时间】:2018-10-24 00:42:12
【问题描述】:

有两个表格[弓细节和物品细节]。我实际上已经完成了两个表之间的关联

 var BomDetail = sequelize.define('BomDetail', {
        bomId: {
            type: DataTypes.STRING,
            field: 'bom_id',
            unique: true
        },
        createdBy: {
            type: DataTypes.STRING,
            field: 'created_by'
     },
BomDetail.hasMany(models.ItemDetail, {
     foreignKey: 'bomId',
     sourceKey: 'bomId',
     onDelete: 'cascade'
});

var ItemDetail = sequelize.define('ItemDetail', {
        itemId: {
            type: DataTypes.STRING,
            field: 'item_id',
            unique: true
        },
        holdDate: {
            type: DataTypes.DATE,
            field: 'hold_date',
        },
        bomId: {
            type: DataTypes.STRING,
            field: 'bom_id'
        },
ItemDetail.associate = function(models) {
        ItemDetail.belongsTo(models.BomDetail, {
            foreignKey: 'bomId',
            targetKey: 'bomId',
            onDelete: 'cascade'
        });
    };

当我这样做时

Models.ItemDetail.findAll({
include: {
model: Models.BomDetail
}
})

项目详情中的bomdetail的正常结果会出现

{
"id": 3,
"itemId": "2397saf8enaeflk8",
"productId": "afsggfg14fhg43t",
"productName": "Siemens meter",
"quantity": 3,
"followUpDate": "2018-05-15T18:30:00.000Z",
"leadTime": 10,
"releaseDate": "2018-05-20T18:30:00.000Z",
"holdDate": "2018-05-31T18:30:00.000Z",
"bomId": "azcpspp02_07141700_07_00_M00",
"status": "hold",
"created_at": "2018-05-14T09:20:15.658Z",
"updated_at": "2018-05-14T09:20:15.658Z",
"BomDetail": {
"id": 50,
"bomId": "azcpspp02_07141700_07_00_M00",
"createdBy": "azcpspp02",
"createdByName": "Siemens BLR -nry85322",
"bomCreatedDate": "2018-02-26T00:00:00.000Z",
"soldToAcc": "30000006",
"status": "hold",
"created_at": "2018-05-11T11:58:46.267Z",
"updated_at": "2018-05-11T11:58:46.267Z"
}
},

但是当我这样做时

Models.BomDetail.findAll({
include: {
model: Models.ItemDetail:
}
})

错误会来.. 将 nvarchar 值 'azcpspp02_07141700_07_00_M00' 转换为数据类型 int 时转换失败。

比较BomDetail表中sequelize生成的主键和ItemDetail的外键 喜欢 ...左外连接 [lta_item_detail] AS [ItemDetails] ON [BomDetail].[id] = [ItemDetails].[bom_id];

但我想比较 BomDetail 表的唯一键(bomId)和 ItemDetail 表的对应外键(BomId)..

(即)...左外连接 [lta_item_detail] AS [ItemDetails] ON [BomDetail].[bom_id] = [ItemDetails].[bom_id];

我该怎么办?

【问题讨论】:

    标签: sql-server node.js sequelize.js


    【解决方案1】:

    尝试将源键定义为字段名称,以便关联会相应地工作。

    BomDetail.hasMany(models.ItemDetail, {
        foreignKey: 'bomId',
        sourceKey: 'bom_id',
        onDelete: 'cascade'
    });
    

    【讨论】:

      【解决方案2】:

      尝试从 ItemDetail 模型中删除 bomId 并执行所需的 false 以应用左外连接。

      Models.BomDetail.findAll({
          include: {
             model: Models.ItemDetail,
             required : false
          }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-27
        • 2016-09-28
        • 2017-08-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多