связывание двух таблиц в дальнейшем - PullRequest
0 голосов
/ 11 ноября 2018

У меня проблемы с ассоциированием 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;

Модель 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 не связан с zone_plz!

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 13 ноября 2018

Вы создали ссылки, а не ассоциации. Пожалуйста, прежде всего, прочитайте различия: Секвелизируйте ссылки на модели и ассоциации затем создайте ассоциации между плз и зоной, например:

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