node.js - Sequelizejs 未关联到

标签 node.js sequelize.js

我做了一些关联,但没有成功,可能是我出了问题,寻求帮助。 有两种型号

module.exports = function (sequelize, DataTypes) {
var pages_lang = require('./pages_lang')(sequelize, DataTypes);
return sequelize.define('pages', {
    id: {
        type: DataTypes.INTEGER(10),
        allowNull: false,
        primaryKey: true,
        autoIncrement: true,
        references :  { model: "pages_lang", key: "page_id" }
    },
    name: {
        type: DataTypes.STRING,
        allowNull: false
    },
    published: {
        type: DataTypes.BOOLEAN,
        allowNull: false,
        defaultValue: '0'
    },
    createdAt: {
        type: DataTypes.DATE,
        allowNull: false,
        defaultValue: '0000-00-00 00:00:00'
    },
    updatedAt: {
        type: DataTypes.DATE,
        allowNull: false,
        defaultValue: '0000-00-00 00:00:00'
    }
}, {
    classMethods: {
        associate: function (models) {
            this.hasMany(models.pages_lang, {onDelete: 'SET NULL', onUpdate: 'CASCADE', foreignKey: 'page_id', as: 'pages', through: models.pages_lang});
        },
        getAll() {
            return this.findAll({include: [{model: pages_lang, as: 'pages_lang'}]}).then(function (result) {
                return result;
            });
        }
    }
});

};

module.exports = function (sequelize, DataTypes) {
return sequelize.define('pages_lang', {
    id: {
        type: DataTypes.INTEGER(10),
        allowNull: false,
        primaryKey: true,
        autoIncrement: true
    },
    page_id: {
        type: DataTypes.INTEGER(10),
        allowNull: false,
        references :  { model: "pages", key: "id" }
    },
    content: {
        type: DataTypes.TEXT,
        allowNull: false
    }
}, {
    classMethods: {
        associate: function (models) {
            this.belongsTo(models.pages, {foreignKey: 'id', foreignKeyConstraint:true, as: 'pages', through: models.pages});
        }
    }
});

};

但是当你调用时会出现错误

Unhandled rejection Error: pages_lang (pages_lang) is not associated to pages!

非常感谢您的帮助

最佳答案

您的关联别名 (as) 应与您传递给 findAll 的内容匹配

this.hasMany(models.pages_lang, {onDelete: 'SET NULL', onUpdate: 'CASCADE', foreignKey: 'page_id', as: 'pages_lang' });

return this.findAll({include: [{model: pages_lang, as: 'pages_lang'}]});

由于模型已经被称为pages_lang,您也可以完全跳过别名:

this.hasMany(models.pages_lang, {onDelete: 'SET NULL', onUpdate: 'CASCADE', foreignKey: 'page_id'});

return this.findAll({include: [pages_lang]});

请注意,我删除了 through 参数 - 它只能用于 belongsToMany (多对多)

关于node.js - Sequelizejs 未关联到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36268134/

相关文章:

node.js - SequelizeDatabaseError : SQLITE_ERROR: no such table: Users

graphql - 如何使用 GraphQL 和 node 实现接口(interface)

javascript - Express 似乎忽略了根路由的 Controller

node.js - RSS 和堆有什么区别?

javascript - Date().toLocaleString() 输出格式在实时服务器和本地主机上不同

node.js - URL 格式错误,无法解析

node.js - Sequelizejs 在列上运行函数时出错 - check_ungrouped_columns_walker in

node.js - 如何在nodejs中等待异步函数完成执行

postgresql - 使用UTC : false 时,Sequelize Date 列仍返回为UTC

node.js - Sequelize审计追踪的 Node 库