#node.js #sequelize.js
#node.js #sequelize.js
Вопрос:
Я застрял с этой проблемой уже довольно давно, и я не знаю, что не так с моим кодом, я пытаюсь связать одну таблицу с другой, но работает только половина из них. любая помощь была бы очень признательна.
models/companies.js
const DataTypes = require('sequelize');
const sequelize = require('../config/database');
const Users = require('./users');
const Companies = sequelize.define(
'companies',
{
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER
},
name: {
type: DataTypes.STRING(50),
unique: true,
allowNull: false
},
image_url: {
type: DataTypes.STRING(100),
unique: true
},
created_at: {
allowNull: true,
type: DataTypes.DATE,
defaultValue: Date.now()
},
updated_at: {
allowNull: true,
type: DataTypes.DATE,
defaultValue: Date.now()
}
},
{
//Rewrite default behavior of sequelize
timestamps: false,
paranoid: true,
underscored: true
}
);
Companies.hasMany(Users);
Users.belongsTo(Companies);
Companies.sync();
module.exports = Companies;
models/users.js
const DataTypes = require('sequelize');
const sequelize = require('../config/database');
const Users = sequelize.define(
'users',
{
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER
},
name: {
type: DataTypes.STRING(40),
allowNull: false
},
email: {
type: DataTypes.STRING(60),
allowNull: false,
unique: true
},
password: {
type: DataTypes.STRING(60)
},
role: {
type: DataTypes.STRING(40),
allowNull: false
},
image_url: {
type: DataTypes.STRING(100),
unique: true
},
batch: {
type: DataTypes.STRING(3)
},
major: {
type: DataTypes.STRING(10)
},
company_id: {
type: DataTypes.INTEGER,
allowNull: false
},
created_at: {
allowNull: true,
type: DataTypes.DATE,
defaultValue: Date.now()
},
updated_at: {
allowNull: true,
type: DataTypes.DATE,
defaultValue: Date.now()
}
},
{
//Rewrite default behavior of sequelize
timestamps: false,
paranoid: true,
underscored: true
}
);
Users.sync();
module.exports = Users;
Затем после того, как я попытаюсь запустить этот код ниже
const Companies = require('./database/models/companies');
const Users = require('./database/models/Users');
//Relation 1: Company and Users
Companies.findAll({ include: [ Users ] }).then((res) => console.log(res));
Users.findAll({ include: [ Companies ] }).then((res) => console.log(res));
это дает мне эту ошибку:
(node:4893) UnhandledPromiseRejectionWarning: SequelizeEagerLoadingError: companies is not associated to users!
Я попробовал несколько решений в Интернете, но в данном случае это не помогло.
Ответ №1:
BelongsTo
означает взаимно однозначное отношение, в то время как у компании может быть несколько пользователей (имеется в виду вызов BelongsTo
после hasMany
столкновения!).
Комментарии:
1. Спасибо, при попытке решить вышеуказанную проблему я также наткнулся на эту статью, и, по-видимому, это не помогло. Я пытаюсь запустить этот код Users.findAll({ include: [ Companies ] }).then((res) => console.log(res)); и для этого мне кажется, что вы должны указать отношения между пользователями и компаниями со стороны пользователей
2. @IngVankhinh верно, имеет смысл, что a
User
будет иметь внешний ключ вCompanies
таблице3. Спасибо за ваши усилия, чтобы помочь этому сообществу, брат