Я пытаюсь соединить две таблицы с использованием Sequelize включит как таковые:доступа внутреннего соединение данных из sequelize с использованием включают
models.user.findAll({include: {model: models.boardMember, required:true}})
.then(function(board) {
console.log(board);
res.render('contact', { title: 'Kontakt', board: board });
});
Моих моделей выглядеть следующим образом, используя sequelize express example:
пользователя (это не вполне чувствовать себя имея hasMany здесь, а не в boardMembers, но я не хочу иметь ключевое поле иностранного в таблице пользователей)
module.exports = function(sequelize, DataTypes) {
var user = sequelize.define('user', {
//lots of normal user fields(username, password, access...
}, {
classMethods: {
associate: function(models) {
user.hasMany(models.boardMember, {
foreignKey: {
allowNull: false
}
});
}
}
});
return user;
};
boardMember
module.exports = function(sequelize, DataTypes) {
var boardMember = sequelize.define('boardMember', {
post: {
type: DataTypes.STRING,
unique: false,
allowNull: false
}
});
return boardMember;
};
Затем я хочу, чтобы получить доступ к данным, возвращаемые в таблице с помощью рулей:
{{#each board}}
<tr>
<td>{{boardMembers.post}}</td>
<td>{{firstName}} {{surName}}</td>
<td>{{email}}</td>
</tr>
{{/each}}
Вот где я получаю это неправильно (я думаю). Появляются имена и адрес электронной почты, но не почта. Я пробовал использовать только сообщение, но безрезультатно. Это странно, потому что я думаю, что запрос, который генерируется, выглядит так (я удалил createdAt
и updatedAt
столбцы, чтобы сделать его короче для вас читать):
SELECT
`user`.`id`, `user`.`username`, `user`.`password`,
`user`.`firstName`, `user`.`surName`, `user`.`email`, `user`.`access`,
`boardMembers`.`id` AS `boardMembers.id`, `boardMembers`.`post` AS `boardMembers.post`,
`boardMembers`.`userId` AS `boardMembers.userId`
FROM
`users` AS `user`
INNER JOIN
`boardMembers` AS `boardMembers` ON `user`.`id` = `boardMembers`.`userId`;
console.log выдает что-то вроде этого (данные очевидно, изменилось):
[ Instance {
dataValues:
{ id: 2,
username: 'username',
password: 'hashedPassword',
firstName: 'User',
surName: 'Name',
email: '[email protected]',
access: '0',
boardMembers: [Object] },
...
]
Любая помощь много оценен по достоинству!
Спасибо,
Freece
Хм, к сожалению, это не сработало. Пробовал использовать это: 'models.user.findAll ({include: [{nested: true, all: true, model: models.boardMember, required: true}]})' и несколько разных версий. Спасибо за подсказку! – Freece
с указанием модели не требуется, если вы используете опцию all: true. И из того, что я вижу из вашего вопроса, вы извлекаете связанный с ним boardMemebers ('boardMembers: [Object]' в массиве ответов), но в вашем шаблоне вы обрабатываете атрибут boardMember, как если бы он содержал один объект, но отношение было множественным – yeiniel
Да, вы правы. Я думал об этом неправильно. Я понял, что мне нужно создать собственный помощник для HandleBars. – Freece