mysql - 在 sequelize 中关联两个表

标签 mysql node.js foreign-keys associations sequelize.js

我在关联 2 个模型时遇到问题。我会尽量详细地描述问题,希望你能帮助我。

我有 2 个模型:Zone 和 PLZ(两者也是 database-mysql 中的表)。
一个区域可以有多个 PLZ,一个 PLZ 可以属于一个区域。

在保存带有 PLZ 的区域时,我有一个名为“zone_plz”的表,只有两列:zone_id 和 plz_id。两者都有 Zone.id 和 PLZ.id 的外键

区域模型:

const Sequelize = require('sequelize');
const sequelize = require('../util/database');
const PLZ = require('../models/PLZ');
const zone_plz = require('../models/relations/zone_plzs');


const Zone = sequelize.define('zone', {
    name: {
        type: Sequelize.STRING,
        allowNull: false
    },
    color: {
        type: Sequelize.STRING,
        allowNull: false
    }
}, {
    timestamps: true
});


module.exports = Zone;


LZ型号:

const Sequelize = require('sequelize');
const sequelize = require('../util/database');
const Zone = require('../models/Zone');
const zone_plz = require('../models/relations/zone_plzs');


const PLZ = sequelize.define('plz', {
    plz: {
        type: Sequelize.INTEGER,
        allowNull: false
    },
    city: {
        type: Sequelize.STRING,
        allowNull: false
    },
    district: {
        type: Sequelize.STRING
    }

});


module.exports = PLZ;


这是 zone_plz 模型:

const Sequelize = require('sequelize');
const sequelize = require('../../util/database');
const PLZ = require('../../models/PLZ');
const Zone = require('../../models/Zone');


const zone_plz = sequelize.define('zone_plz', {
    zone_id: {
        type: Sequelize.INTEGER,
        allowNull: false,
        references: {
            model: Zone,
            key: 'id',
        }
    },
    plz_id: {
        type: Sequelize.INTEGER,
        allowNull: false,
        references: {
            model: PLZ,
            key: 'id',
        }
    }
}, {
    timestamps: true
});


module.exports = zone_plz;


这就是我查询它的方式:

router.get('/', function (req, res, next) {

    zone_plz.findAll({
        include: [{
            model: PLZ,
            as: 'plz'
        },
            {
                model: Zone,
                as: 'zone'
            }]
    }).then((result) => {
        res.send({status: true, data: result})
    }).catch(function (err) {
        next(err)
    })
});

如您所见,我想将一个包含所有所属 plz 的区域返回给用户。

我是 Sequelize 的新手,我也不确定这是否是正确的方法。我收到错误消息: plz 与 zone_plz 无关!

谁能帮我?

最佳答案

您创建了引用,而不是关联。请首先阅读不同之处:Sequelize model references vs associations
然后在 plz 和 zone 之间创建关联,例如:

plz.belongsToMany(zone, {through: 'zone_plz'});
zone.belongsToMany(plz, {through: 'zone_plz'});

关于mysql - 在 sequelize 中关联两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53251874/

相关文章:

node.js - 属于很多关联添加外键到源模型,SequelizeDatabaseError : column "CategoryID" does not exist

node.js - 从命令行停止 node.js 程序

scala - Slick codeGenerator 未填充外键名称导致断言失败 : duplicate foreign key names detected

mysql - CakePHP 关联困惑

javascript - React Native中的未知模块 "child_process"

mysql - 更高效的外键关系还是大表(通过问题思考)?

php - 根据另一个结果的总数对 MySQL 结果进行排序

c# - 为连续日期选择最近的时间

java - 如何在Java中使用准备好的语句进行选择查询?

MySQL减去同一列中的连续行