A.js:
A.associate = models => {
A.hasMany(models.B, { foreignKey: 'A_id' });
A.hasMany(models.C, { foreignKey: 'A_id' });
A.hasMany(models.D, { foreignKey: 'A_id' });
};
A.findOne({
where: { id: _id },
include: [ B, C, D ],
});
B.js:
B.associate = models => {
B.belongsTo(models.A, { foreignKey: 'A_id' });
};
C.js:
C.associate = models => {
C.belongsTo(models.A, { foreignKey: 'A_id' });
};
D.js:
D.associate = models => {
D.belongsTo(models.A, { foreignKey: 'A_id' });
};
БД:
A TABLE
id:1 name: A
B TABLE
A_id:1 name: B1
A_id:1 name: B2
blabla...
Результат A :: findOne:
A
id:1 blabla...
B
A_id:1 name: B1
A_id:1 name: B2 -> NO FIND B2
Я хочу искать «одну запись A» и «несколько записей B, C, D». Как я могу это сделать? Ассоциация в Продолжить так сбивает с толку.
Любая помощь приветствуется!
маршруты / A.js
router.get('/:id', (req, res) => {
const { A } = require('../models');
A.getById(req.params.id)
.then(record => {
console.info(record[0].Bs);
});
});
модели / A.js
A.associate = models => {
A.belongsTo(models.User, {foreignKey: 'userId'});
A.hasMany(models.B, {foreignKey: 'A_Id'});
A.hasMany(models.C, {foreignKey: 'A_Id'});
};
A.getById = _id => {
const { B, C } = require('../models');
return A.findAll({
where: { id: _id },
include: [ B, C ],
});
};
модели / B.js
B.associate = models => {
B.belongsTo(models.A, { foreignKey: 'A_Id' });
};
выполненный запрос
SELECT `A`.`id`, `A`.`userId`, `A`.`name`,
`Bs`.`A_Id` AS `Bs.A_Id`, `Bs`.`name` AS `Bs.name`,
`Cs`.`A_Id` AS `Cs.A_Id`, `Cs`.`name` AS `Cs.name`
FROM `As` AS `A`
LEFT OUTER JOIN `Bs` AS `Bs` ON `A`.`id` = `Bs`.`A_Id`
LEFT OUTER JOIN `Cs` AS `Cs` ON `A`.`id` = `Cs`.`A_Id`
WHERE `A`.`id` = '1'
войти в routes / A.js
[ B {
dataValues: { A_Id: 1, name: 'Name1' },
_previousDataValues: ...
...
} ]
Но результаты выполнения запроса - это несколько строк. (в клиентской программе БД)
@legoMyEgo да, пробовал. Но результаты такие же. одиночный A, одиночный B, C, D.
Какой точный код выполняет ваш запрос? Добавьте это к вопросу
@legoMyEgo спасибо за комментарий. Я добавил свой источник. пожалуйста, проверьте мой источник. Я не могу решить эту проблему.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы пробовали делать запросы с
findAll()? Если у вас есть только одна запись в A, он вернет эту единственную запись ... и все остальные записи из B, C и D