Как связать две модели в узле JS - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь установить связь между этими двумя таблицами, но не получаю ее, и она выдает следующую ошибку: «UnhandledPromiseRejectionWarning: SequelizeEagerLoadingError: cfg_user не связан с dn_coluna!»

следуетниже контроллеров и моделей, которые я использую для внутреннего соединения

Это мой cfg_user.js

const sequelizePaginate = require("sequelize-paginate");

module.exports = function(sequelize, DataTypes) {
    const cfg_user = sequelize.define("cfg_user", {
        'id_cfg_user': {
            type: DataTypes.INTEGER(11),
            allowNull: false,
            primaryKey: true,
            autoIncrement: true
        },
        'id_cfg_grupo': {
            type: DataTypes.INTEGER(11),
            allowNull: true
        },
        'nome': {
            type: DataTypes.CHAR(100),
            allowNull: true
        },
        'email': {
            type: DataTypes.CHAR(100),
            allowNull: true
        },
        'arquivo': {
            type: DataTypes.CHAR(255),
            allowNull: false
        },
        'senha': {
            type: DataTypes.CHAR(32),
            allowNull: true
        }
    },{
        tableName: "cfg_user",
        freezeTableName: true,
        timestamps: false
    });

    sequelizePaginate.paginate(cfg_user);
    return cfg_user;
};

Это мой dn_coluna.js

const sequelizePaginate = require("sequelize-paginate");
const cfg_user = require("./cfg_user");

module.exports = function(sequelize, DataTypes) {
    const dn_coluna = sequelize.define("dn_coluna", {
        'id_dn_coluna': {
            type: DataTypes.INTEGER(10),
            allowNull: false,
            primaryKey: true,
            autoIncrement: true
        },
        'id_cfg_user': {
            type: DataTypes.INTEGER(10),
            allowNull: false
        },
        'coluna': {
            type: DataTypes.CHAR(255),
            allowNull: false
        },
        'frase': {
            type: DataTypes.CHAR(255),
            allowNull: true,
        },
        'resumo': {
            type: DataTypes.CHAR(255),
            allowNull: true,
        },
        'url': {
            type: DataTypes.CHAR(255),
            allowNull: true
        },
        'arquivo': {
            type: DataTypes.CHAR(255),
            allowNull: true
        },
        'arquivo_topo': {
            type: DataTypes.CHAR(255),
            allowNull: true
        },
        'arquivo_bg': {
            type: DataTypes.CHAR(255),
            allowNull: true
        },
        'ordem': {
            type: DataTypes.INTEGER(11),
            allowNull: true
        },
        'destaque':{
            type: DataTypes.TINYINT(1),
            allowNull: true
        },
        'libera': {
            type: DataTypes.TINYINT(1),
            allowNull: true
        }
    },{
        tableName: "dn_coluna",
        freezeTableName: true,
        timestamps: false
    });

    sequelizePaginate.paginate(dn_coluna);
    return dn_coluna;
};

этомой контроллер

const { dn_coluna } = require("../models");
const { cfg_user } = require("../models");

module.exports = {
    async index(req, res){
        const colunas = await dn_coluna.findAll({
            include: [{
                model: cfg_user,
                attributes: []
            }],
            attributes: ['id_cfg_user'],
        })
        .then(colunas => {
            return res.status(200).json(colunas);
        });
    },
};

1 Ответ

0 голосов
/ 24 декабря 2018

Ваш ответ лежит в ассоциациях.Вы неправильно связываете свои таблицы вместе. Вот ссылка на документацию .Я не уверен в типе отношений, которые есть у cfg_user и dn_coluna, поэтому я не могу показать вам, как написать ассоциацию, но ниже может помочь.

Удалить ниже из dn_coluna.js

'id_cfg_user': {
    type: DataTypes.INTEGER(10),
    allowNull: false
 }

Добавить в dn_coluna.js (чуть выше sequelizePaginate.paginate(dn_coluna);):

dn_coluna.associate = (models) => {
    dn_coluna.hasMany(models.cfg_user, {foreignKey: 'cfg_user_id'})
}

В cfg_user.js добавить(чуть выше sequelizePaginate.paginate(cfg_user);):

cfg_user.associate = (models) => {
    cfg_user.belongsTo(models.dn_coluna)
}

Вышеуказанное создаст отношения один ко многим между dn_coluna и cfg_user.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...