Sequelize Eager加载根本不工作

时间:2017-11-14 20:44:04

标签: javascript express sequelize.js

首先,我已经在StackOverflow和几乎所有地方搜索过有关此主题的每一个问题,所以我问你是否可以帮助我。

我正在使用ExpressJS(v4.15.5)和Sequelize(v4.22.6)创建一个Web应用程序。我定义了模型,迁移,关联,并包含为所有关联添加别名,因此我将在进行预先加载时使用此别名。如果我尝试加载一个特定的关联,告诉我 X Y 无关,当然,如果我尝试使用{include: [{all: true}]}急切加载所有关联它不会返回任何关联。

我已经验证了同步是否正在完成,而且在文件bin/www中是

models.sequelize.sync().then(function() {
    /**
     * Listen on provided port, on all network interfaces.
     */
    server.listen(port, function() {
        debug('Express server listening on port ' + server.address().port);
    });
    server.on('error', onError);
    server.on('listening', onListening);
});

以上是我的模型 MessageGroup 消息以及我的 routes / index.js 文件。

MessageGroup模型

'use strict';

module.exports = (sequelize, DataTypes) => {
    var MessageGroup = sequelize.define('MessageGroup', {
        slug: DataTypes.STRING,
        name: DataTypes.STRING
    }, {
        classMethods: {
            associate: function (models) {
                // associations can be defined here
                MessageGroup.hasMany(models.Message, { as:'messages', foreignKey: "messageGroupId" });
            }
        }
    });

    return MessageGroup;
};

消息模型

'use strict';

module.exports = (sequelize, DataTypes) => {
    var Message = sequelize.define('Message', {
        slug: DataTypes.STRING,
        name: DataTypes.STRING,
        description: DataTypes.TEXT
    }, {
        classMethods: {
            associate: function (models) {
                // associations can be defined here
                Message.belongsTo(models.MessageGroup, { as:'messageGroup', foreignKey: "messageGroupId" });
                Message.hasMany(models.MessageParameter, { as:'messageParameters', foreignKey: "messageId" });
            }
        }
    });

    return Message;
};

routes / index.js文件

<!-- language: javascript -->
const express = require('express');
const router = express.Router();
const models = require('../models');

router.get('/data', function (req, res, next) {
    models.MessageGroup.findAll({include: [{all: true}]}).then(result => {
        res.json({data: result});
    });
});


module.exports = router;

提前致谢。

1 个答案:

答案 0 :(得分:0)

问题解决了。我正在使用sequelize v3语法。在v4语法模型中,classMethods消失和关联是这样的:

 ...   
     Message.associate = function (models) {
            // associations can be defined here
            Message.belongsTo(models.MessageGroup, { as:'messageGroup', foreignKey: "messageGroupId" });
            Message.hasMany(models.MessageParameter, { as:'messageParameters', foreignKey: "messageId" });
        };
    ...

此处有更多信息http://docs.sequelizejs.com/manual/tutorial/upgrade-to-v4.html