У меня есть простая примерка приложения, где я пытаюсь установить соотношение между 1 и многими из двух таблиц. Я использую sequelize с mssql (утомительно). Когда я начинаю, у меня нет таблиц в базе данных. Я успешно подключаюсь к базе данных, а затем пытаюсь создать/синхронизировать модели с базой данных.Проблема с 1: м (с использованием ownTo и hasMany). Результат не отражает предлагаемую модель
Я предоставил свой код здесь, чтобы узнать, есть ли у кого-нибудь идеи, почему я не могу получить желаемый результат. Я видел, что некоторые люди instanceMethods и classMethods и создать некоторый объект с именем ассоциированный, но я ничего не вижу в документации об этом. Что мне здесь не хватает? Я просто хочу, чтобы мои элементы были заполнены при запросе моего проекта. Правильно ли я устанавливаю связь?
Я даже рассматривал использование принадлежитToMany следующим образом, но он, похоже, не работает для меня.
project.belongsToMany(workitem, {through: 'ProjectWorkItem', as: 'Items', foreignKey: 'workitemId'});
workitem.belongsToMany(project, {through: 'ProjectWorkItem', as: 'Projects', foreignKey: 'projectId'});
index.js
const Sequelize = require('sequelize');
var sequelize = new Sequelize('mssql://username:[email protected]:1433/sequelize-test')
sequelize
.authenticate()
.then(function (err) {
const services = require('./models');
services(sequelize);
console.log('Connection has been established successfully.');
})
.catch(function (err) {
console.log('Unable to connect to the database:', err);
});
модели \ index.js
'use strict';
const WorkItem = require('./workitem-model');
const Project = require('./project-model');
module.exports = function (sequelize) {
console.log('Pre-configure start');
const project = Project(sequelize);
const workitem = WorkItem(sequelize);
var projectInstance = project.build({
title: 'very important project',
description: 'Some description'
});
projectInstance
.save()
.then(function (savedProject) {
var itemInstance = workitem.build({
text: "abc",
projectId: savedProject.id
});
itemInstance
.save()
.then(function() {
project.
findById(savedProject.id)
.then(function (dbProject) {
console.log(dbProject.title);
// THIS RETURNS UNDEFINED - SHOULDN'T THERE BE DATA
console.log(dbProject.Items); // <-------------
});
});
});
};
модели \ workitem.js
'use strict';
const Sequelize = require('sequelize');
const Project = require('./project-model');
module.exports = function (sequelize) {
const workitem = sequelize.define('workitems', {
text: {
type: Sequelize.STRING,
allowNull: false
}
}, {
freezeTableName: true
});
const project = Project(sequelize);
workitem.belongsTo(project);
project.hasMany(workitem, {
as: 'Items'
});
workitem.sync();
return workitem;
};
модели \ project.js
'use strict';
const Sequelize = require('sequelize');
module.exports = function (sequelize) {
const project = sequelize.define('projects', {
title: {
type: Sequelize.STRING,
allowNull: false
},
description: {
type: Sequelize.STRING,
allowNull: false
}
}, {
freezeTableName: true,
});
project.sync();
return project;
};
вы проверили базу данных она содержит данные? –
Да, там есть данные. Я выполнил инструкции SQL в Management Studio, чтобы убедиться, что в таблицах есть данные. – abraganza
do console.log (savedProject.id) перед проектом. findById (savedProject.id) и проверить, прошел ли идентификатор права –