#javascript #sql #node.js #objection.js
Вопрос:
я пытаюсь установить отношения «многие ко многим» в Objection.js. У меня есть таблица «организации», таблица «пользователи» и таблица «организации-пользователи» моста. Я хочу собрать всех пользователей внутри организации.
Модель Организации:
const { Model } = require('objection');
const Vehicle = require('./vehicle');
const User = require('./user');
class OrganizationModel extends Model {
static tableName = "organizations"
static relationMappings = {
vehicles: {
relation: Model.HasManyRelation,
modelClass: Vehicle,
join: {
from: 'organizations.id',
to: 'vehicles.organization_id'
}
},
users: {
relation: Model.ManyToManyRelation,
modelClass: User,
join : {
from: 'organizations.id',
through: {
from: 'organizations_users.organization_id',
to: 'organizations_users.user_id'
},
to: 'users.id'
}
}
}
}
module.exports = OrganizationModel;
Обработчик запросов:
app.get("/organizations/users", async (req, res) => {
const users = await OrganizationModel.relatedQuery('users').for('*')
.then(users => {
res.status(200).json(users);
}).catch(error => {
console.error(error.message);
res.status(500);
})
});
Я дважды проверил названия таблиц, и они наверняка верны. API всегда возвращает пустой массив, независимо от того, что я предоставляю в ‘.for()’
Исправлено, оказывается, это был порядок запросов в моем API. Express последовательно считывает запросы, поэтому мой звонок перехватывал другой запрос. Если у вас возникла аналогичная проблема, попробуйте переместить обработчик запроса ниже в коде.