#node.js #postgresql #sequelize.js
#node.js #postgresql #sequelize.js
Вопрос:
Рассмотрим эти таблицы
const User = sequelize.define('users', {
name: {
type: Sequelize.TEXT
},
password: {
type: Sequelize.TEXT
},
status: {
type: Sequelize.BIGINT,
field: 'statusId',
},
date_of_birth: {
type: Sequelize.DATE
},
});
const Status = sequelize.define('statuses', {
name: {
type: Sequelize.TEXT
},
});
const UserRate = sequelize.define('user_rates', {
title: {
type: Sequelize.TEXT
},
user: {
type: Sequelize.BIGINT,
field: 'userId'
},
comment: {
type: Sequelize.TEXT
},
rate: {
type: Sequelize.NUMBER
},
});
User.belongsTo(Statuses, { foreignKey: 'statusId', as: 'userStatus'})
User.hasMany(UserRate, { foreignKey: 'userId', as: 'userRate' })
UserRate.findAll({ include: ['userRate']});
запрос выполняется хорошо, я понимаю это:
{
title: 'test',
rate: 4,
user: 1,
comment: 'test',
userRate: {
name: 'test',
password: 'test',
status: '1',
date_of_birth: '11/22/1111',
}
}
но если я хочу получить это:
{
title: 'test',
rate: 4,
user: 1,
comment: 'test',
userRate: {
name: 'test',
password: 'test',
status: '1',
date_of_birth: '11/22/1111',
userStatus: {
name: 'active',
id: 1,
}
}
}
я хочу включить статус в пользовательский объект. Я посмотрел много мест, но не могу найти решение для этого. я даже пытаюсь это:
UserRate.findAll({ include: ['userRate', 'userStatus]});
но это вообще не сработало
я пытался использовать belongsToMany, но мне не удалось заставить его работать, возможно, я как-то неправильно это делаю. очень признателен за любую помощь
Ответ №1:
UserRate не имеет прямой связи / отношения с UserStatus . Итак, вы должны включить его в пользовательскую модель.
UserRate.findAll({
include: [{
model: User, as: 'userRate',
include: [{
model: Status, as: 'userStatus',
}],
}],
});
Не путайте массив объектов в include, если вы видите это впервые. Вы можете включить больше моделей, которые должны иметь ассоциацию / отношение, определенные с родительским элементом, который включает его.