【问题标题】:hasmany in express js not working with sequelize快递js中的hasmany不能与续集一起使用
【发布时间】:2017-08-14 21:39:26
【问题描述】:

我已经创建了模型技能和成员

会员表:

id  username    password    created
1   gagandeep   99703dd91da5b0cabf496d49af0ab03c2dfe7788    2017-08-14 05:59:46

技能表:

id  member_id   skill
1   1   programming
2   1   music

代码:

型号

var Member=Seq.define('members',{}, {});
var Skills=Seq.define('skills',{}, {});
Member.hasMany(Skills,{as: 'skills', through: 'skills', foreignKey:'member_id'});

呼叫:

router.route('/test').get(function(req, resp){
    Member.findAll({include: [{model: Skills}]},{
            raw:true
        }).success(onSuccess).error(onError);

        function onSuccess(data){
            resp.json(data);
        }

        function onError(data){
            resp.json(data);
        }
});

但 Node js 显示错误如下:

错误:技能未与成员关联!在 DAOFactory.validateIncludedElement (C:\Users\promatics\Desktop\netpar\node_modules\sequelize\lib\dao-factory.js:1476:13) 在 DAOFactory.validateIncludedElements (C:\Users\promatics\Desktop\netpar\node_modules\ sequelize\lib\dao-factory.js:1388:59) 在 DAOFactory.module.exports.DAOFactory.findAll (C:\Users\promatics\Desktop\netpar\node_modules\sequelize\lib\dao-factory.js:458: 34) 在 Object.handle (C:\Users\promatics\Desktop\netpar\demo.js:72:9) 在 next_layer (C:\Users\promatics\Desktop\netpar\node_modules\express\lib\router\route. js:103:13) 在 Route.dispatch (C:\Users\promatics\Desktop\netpar\node_modules\express\lib\router\route.js:107:5) 在 C:\Users\promatics\Desktop\netpar\ node_modules\express\lib\router\index.js:195:24 在 Function.proto.process_params (C:\Users\promatics\Desktop\netpar\node_modules\express\lib\router\index.js:251:12) 在下一个 (C:\Users\promatics\Desktop\netpar\node_modules\express\lib\router\index.js:189:19) 在下一个 (C:\Users\promatics\Desktop\netpar\node_modules\exp ress\lib\router\index.js:166:38)

【问题讨论】:

    标签: express


    【解决方案1】:

    您实际上并不需要 through 语句。仅当您通过联结表在两个表之间建立关联时,才使用 through。我会在这里做的是......

    var Member = Seq.define('members', {
      // Some attributes...
    });
    
    var Skills = Seq.define('skills', {
      // Some attributes...
    });
    
    Member.hasMany(Skills, {
      as: 'skills', 
      // Remove `through`!
      foreignKey: 'member_id'
    });
    
    // Want to query for all members with the skills joined?
    Member.findAll({
      include: {
        model: Skills,
        as: 'skills'
      }
    });
    

    这应该会为您提供您正在寻找的结果。每个member 对象都将引用一个内部skills 键,该键是与用户关联的技能数组。

    祝你好运:)

    【讨论】:

    • 您使用的是哪个版本的 Sequelize? 3.x.x, 4.x.x?
    • 我使用的是sequelize@~1.7.0版本
    猜你喜欢
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多