在sequelize中关联两个表

l3zydbqr  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(354)

我有问题关联2个模型。我会尽量详细地描述这个问题,希望你能帮助我。
我有两个模型:zone和plz(它们也是mysql数据库中的表)。可以有一个区域具有多个plz,并且一个plz可以属于一个区域。
在用plz保存一个区域时,我有一个名为“zone\u plz”的表,只有两列:zone\u id和plz\u 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;

plz型号:

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;

这是区域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的区域返回给用户。
我是新的续集,我也不知道这是否是正确的方法。我得到错误:plz没有关联到区域\u plz!
有人能帮我吗?

d7v8vwbk

d7v8vwbk1#

您创建的是引用,而不是关联。首先,请阅读区别:将模型参考与关联进行续集,然后在plz和zone之间创建关联,如:

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

相关问题