javascript - 使用 Sequelize 和 NodeJS 与主键中的其他键进行查询

标签 javascript mysql node.js relationship sequelize.js

我有一个问题,我失去了时间,什么也没有。

我有一个型号 价格:

var price = sequelize.define('price', {
    price_id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: DataType.INTEGER
    },
    carrier_mongo_id : {
        type: DataType.STRING,
        require : true,
        references: {
            model: "carrier",
            key: "carrier_mongo_id"
        },
        onUpdate: 'cascade',
        onDelete: 'cascade'
    },
    value: {
        type: DataType.DECIMAL
    }
});

我有其他型号的承运人:
 var carrier = sequelize.define('carrier', {
    carrier_id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Datatype.INTEGER
    },
    carrier_mongo_id: {
        type: Datatype.STRING,
        require : true
    },
    name: {
        type: Datatype.STRING,
        require : true
    }
});

并进行这样的查询:
carrierModel.hasMany(priceModel, {foreignKey: 'carrier_mongo_id'});

carrierModel.findAll({ include: [{ model: priceModel , required: true }] }).then(function(result){

    var aCarriers = new Array();

    result.forEach(function(carreteiro){
        aCarriers.push(carreteiro.dataValues);
    });

    console.log(aCarriers);

}).catch(function(err){
    console.log(err);
});

我的查询是:
SELECT 
    `carrier`.`carrier_id`,
    `carrier`.`carrier_mongo_id`,
    `carrier`.`name`,    
    `prices`.`price_id` AS `prices.price_id`,
    `prices`.`carrier_mongo_id` AS `prices.carrier_mongo_id`,    
    `prices`.`value` AS `prices.value`
FROM
    `carrier` AS `carrier`
        INNER JOIN `price` AS `prices` ON `carrier`.`carrier_id` = `prices`.`carrier_mongo_id`

但我需要这个 SQL 查询:
SELECT 
    `carrier`.`carrier_id`,
    `carrier`.`carrier_mongo_id`,
    `carrier`.`name`,    
    `prices`.`price_id` AS `prices.price_id`,
    `prices`.`carrier_mongo_id` AS `prices.carrier_mongo_id`,    
    `prices`.`value` AS `prices.value`
FROM
    `carrier` AS `carrier`
        INNER JOIN `price` AS `prices` ON `carrier`.`carrier_mongo_id` = `prices`.`carrier_mongo_id`

我知道我可以使用这种方法 Sequelize.query(...),但我的问题是:

如何使用 Sequelize 模型进行此查询

tks

最佳答案

我为我的案例找到了解决方案 =)

修复是更新 CarrierModel 为 primaryKey 设置carrier_mongo_id

 ........................
 carrier_mongo_id : {
    type: DataType.STRING,
    require : true,
    primaryKey: true,
    references: {
        model: "carrier",
        key: "carrier_mongo_id"
    },
    onUpdate: 'cascade',
    onDelete: 'cascade'
},
.....................

查询是这样的:
 carreteiroModel.hasMany(precoModel, {foreignKey:         'carreteiro_mongo_id', otherKey: 'carreteiro_mongo_id'});
         carreteiroModel.findAll({ include: [{ model: precoModel ,    required: true }] }).
   then(function(result){ ...});

tks 给你评论:)

关于javascript - 使用 Sequelize 和 NodeJS 与主键中的其他键进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40774212/

相关文章:

javascript - 如何从javascript中的字符串中删除正斜杠和反斜杠

javascript - 通过formidable和gm使用Express.js上传的流文件,消除双写

javascript - 如何在进度条全屏表单界面上添加百分比状态

php - 使用 PHPWord 动态表行

mysql - 无法在语句的表结果集中绑定(bind) LIMIT 值

php - 遍历家庭、类别和子类别

javascript - 为什么我的请求对象没有方法 `param` ?

node.js - Nodejs Mongodb更新多个集合

javascript - 如何在服务器端经典 ASP 页面中引用上传的文件?

javascript - typescript / react 。错误类型 '{ key: number; }' 不可分配给类型 ILink(SFC 组件)