В Nodejs я получаю Sequelize. js - ошибка «не связана с» - PullRequest
0 голосов
/ 14 января 2020

У меня есть следующие 2 таблицы в node.js:

пользователей

'use strict'
let Sequelize = require('sequelize');
let dbConnection = require('../connection.js');
let users = dbConnection.connection.define('users', {
        //user table detail
}, {
    classMethods: {associate: function (models) {
        // associations can be defined here
        users.hasMany(models.chat_histories, {foreignKey: 'sender_id'});
        users.hasMany(models.chat_histories, {foreignKey: 'receiver_id'});
    }}
}, {
    timestamps: false
});

module.exports = users;

chat_histories

'use strict'
let Sequelize = require('sequelize');
let dbConnection = require('../connection.js');
let chat_histories = dbConnection.connection.define(
    'chat_histories', {
        //chat_history detail
        link_id: {
            type: Sequelize.STRING(64),
            references: 'links', // <<< Note, its table's name, not object name
            referencesKey: 'id' // <<< Note, its a column name
        },
        sender_id: {
            type: Sequelize.BIGINT,
            references: 'users', // <<< Note, its table's name, not object name
            referencesKey: 'id' // <<< Note, its a column name
        },
        receiver_id: {
            type: Sequelize.BIGINT,
            references: 'users', // <<< Note, its table's name, not object name
            referencesKey: 'id' // <<< Note, its a column name
        }
    },
    {
        classMethods: {associate: function (models) {
            // associations can be defined here
            chat_histories.belongsTo(models.users, {foreignKey: 'sender_id'});
            chat_histories.belongsTo(models.users, {foreignKey: 'receiver_id'});
            chat_histories.belongsTo(models.links, {foreignKey: 'link_id' });
        }}
    }, {
        timestamps: false
    }
);

module.exports = chat_histories;

Однако каждый раз, когда я делаю запрос в таблице chat_history, у меня появляется следующее сообщение об ошибке:

SequelizeEagerLoadingError: chat_histories не связан с пользователями!

Есть что-нибудь не так?

Я вижу, что я уже связал chat_historeis с таблицей пользователей, добавив следующее в chat_histories. js

classMethods: {associate: function (models) {
    // associations can be defined here
    chat_histories.belongsTo(models.users, {foreignKey: 'sender_id'});
    chat_histories.belongsTo(models.users, {foreignKey: 'receiver_id'});
    chat_histories.belongsTo(models.links, {foreignKey: 'link_id' });
}}

И добавил следующее в пользователя. js

classMethods: {associate: function (models) {
    // associations can be defined here
    users.hasMany(models.chat_histories, {foreignKey: 'sender_id'});
    users.hasMany(models.chat_histories, {foreignKey: 'receiver_id'});
    users.hasMany(models.links, {foreignKey: 'owner_id'});
}}

Ниже описан способ поиска оператора SQL:

выбор отдельных пользователей из пользователей, chat_histories где (users.id = chat_histories.sender_id или users.id = chat_histories.receiver_id) и chat_histories.link_id =: link_id;

let chat_histories = model.chat_histories;
let users = model.users;
let usersList;
const Op = Sequelize.Op;
await users.findAll({
    where: {
        [Op.and]: [
            {
                [Op.or]:[
                    {id: chat_histories.sender_id}, 
                    {id: chat_histories.receiver_id}
                ]
            }, 
            {
                link_id: link_id
            }
        ],
    },
    include: [
        {
            model: chat_histories, 
            required: false
        },
    ]
}).then(function(data) {
        usersList = data;
});

Ответы [ 2 ]

0 голосов
/ 17 января 2020

хорошо, в конце я понял, что в классе, где я хочу выполнить запрос, мне нужно поместить следующий код перед выполнением запроса

users.hasMany(chat_histories, {foreignKey: 'sender_id'});

Приведенный выше код определен в классе где я делал запрос вместо ORM класса

0 голосов
/ 14 января 2020

Вы не определили ассоциации должным образом. Для таблиц users и chat_histories необходимо создать ассоциации.

users.hasMany(models.chat_histories, { foreignKey: 'sender_id', as: 'chat_histories' });
chat_histories.belongsTo(models.users, { foreignKey: 'sender_id', as: 'user' });

Я никогда не использовал такие ключевые слова, как references и referencesKey в моделях Sequelize для определения ассоциаций. Я не нахожу ссылки на них в документации.

Надеюсь, это поможет!

...