Я использую Sequelize с существующей базой данных и имею следующее отношение:
EntityA
-N: M-> EntityB
-N: M-> EntityC
Моя база данных содержит таблицы:
EntityA
EntityB
EntityC
EntityA_EntityB ('entity_a_id', 'entity_b_id')
// Redundant fields in this one I know but wasn't sure on the model
EntityA_EntityB_EntityC ('entity_a_id', 'entity_b_id', 'entity_c_id', 'entity_a_entity_b_id')
и запрос как таковой
EntityA.findAll({
include: {
model: EntityB,
include: EntityC
}
Это дает корректно выглядящую модель:
EntityA[
EntityB: [
EntityC: []
]
]
Однако Entity C содержит данные, которые не учитывают ограничение принадлежности к EntityA. Например, у меня может быть «AB C» в EntityC
для EntityA_EntityB
с entity_a_id
из 1 и при получении графика для entity_a_id
из 2 , все EntityC
, относящиеся к EntityB
независимо от EntityA
, извлекаются.
Надеюсь, я объяснил это достаточно последовательно, так как это довольно запутанная вещь для описания.
Мои ассоциации следующие:
// Works great
EntityA.belongsToMany(EntityB, { through: EntityAEntityB, foreignKey: 'entity_a_id' })
EntityB.belongsToMany(EntityA, { through: EntityAEntityB, foreignKey: 'entity_b_id' })
// Not so much
// Need this to also stress that EntityA must match on EntityEntityBEntityC table!
EntityC.belongsToMany(EntityB, { through: { EntityAEntityBEntityC }, foreignKey: 'entity_c_id' })
EntityB.belongsToMany(EntityC, { through: { EntityAEntityBEntityC }, foreignKey: 'entity_b_id' })
// Not so sure on this one?
EntityA.belongsToMany(EntityC, { through: { EntityAEntityBEntityC }, foreignKey: 'entity_a_id' })
EntityC.belongsToMany(EntityA, { through: { EntityAEntityBEntityC }, foreignKey: 'entity_c_id' })
Я попробовал следующее безуспешно:
EntityC.belongsToMany(EntityAEntityB, through: { EntityAEntityBEntityC }, foreignKey: 'entity_a_entity_b_id')
EntityAEntityB.belongsToMany(EntityC, through: { EntityAEntityBEntityC }, foreignKey: 'entity_c_id')
Я также попытался вручную выполнить где, что работает нормально, когда запрашивает EntityA напрямую:
EntityA.findByPk(id, {
include: {
model: EntityB,
include: {
model: EntityC,
through: { where: entity_a_id: id }
}
}
Однако у меня есть сценарий ios, где я запрашиваю другую сущность, которая содержит 1: M EntityA.
User.findByPk(1, {
include: {
model: EntityA,
include:....
И так, у меня нет данных для запроса.
Я изучил документы по сиквелизу и другие посты SO, которые имели схожие модели с моими, но их решения, к сожалению, не сработали. Я полагаю, что это может быть связано с тем, что у меня есть готовая база данных и мне пришлось явно моделировать таблицы ссылок, но я не уверен. Как я могу заставить sequelize принуждать ON entity_a_id = {X}
при присоединении к Entity C? Буду признателен за любые рекомендации.