【问题标题】:assotiating two tables in sequelize在 sequelize 中关联两个表
【发布时间】:2019-04-14 13:36:05
【问题描述】:

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

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

在保存带有 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;

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;

这是 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 的区域返回给用户。

我是续集的新手,我也不确定这是否是正确的方法。我收到错误:plz is not associated to zone_plz!

谁能帮帮我?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我在我的 zone_plz 模型中写这个但得到错误:PLZ.belongsToMany(Zone, {through: 'zone_plz'}); ^ TypeError: PLZ.belongsToMany 不是 Object 的函数。 (/Applications/MAMP/htdocs/transport/models/relations/zone_plzs.js:28:5)
    猜你喜欢
    • 1970-01-01
    • 2019-06-23
    • 2016-07-23
    • 1970-01-01
    • 2016-11-05
    • 2016-07-23
    • 1970-01-01
    • 2018-10-04
    • 2019-08-18
    相关资源
    最近更新 更多