2つのテーブルの間に1対多の関係を設定しようとしているシンプルなサンプルアプリケーションがあります。私はmssql(退屈な)とsequelizeを使用しています。私はデータベースを起動するときにテーブルを持っていません。私はデータベースに正常に接続し、データベースにモデルを作成/同期させてみます。1:mの問題(belongsToおよびhasManyを使用)。結果は提案されたモデルを反映していません
私はここに自分のコードを提供して、誰かが私が望む結果を得ることができない理由があるかどうかを確認しています。私はいくつかの人々がinstanceMethodsとclassMethodsであり、アソシエートと呼ばれるオブジェクトをいくつか作成しているのを見ましたが、私はそのドキュメントについては何も見ていません。私はここで何が欠けていますか?私は自分のプロジェクトを照会するときに私のアイテムコレクションに値を設定したいだけです。アソシエーションを正しく設定していますか?
私はさらに次のようにbelongsToManyを使用すると考えましたが、それは私にとってはうまくいかなかったようです。
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);
});
モデルは
'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); // <-------------
});
});
});
};
モデルindex.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;
};
をworkitem.jsの
モデル\ 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;
};
データが入っているデータベースをチェックしましたか? –
うん、そこにデータがある。 Management StudioでSQL文を実行して、テーブルにデータがあることを確認しました。 – abraganza
プロジェクトの前にconsole.log(savedProject.id)を実行します。 findById(savedProject.id)と正しいIDが渡されているかどうかをチェック –