sequelizeを使用して次の関連付けを作成しようとしていますが、次のエラーが表示されます。私はドキュメンテーションで見つけたものに応じて双方向の関連性を持っています。私はデータベーステーブルを調べるときに外来キーを見ることができるので、問題の原因を混乱させる。この例では、特定の注文に関連付けられた注文と顧客を引き出そうとしています。技術的には、3つのseaprate db pullを実行できますが、これは結合とは対照的に非効率的です。Sequelize:エラー:エラー:Table1はTable2に関連付けられていません
'use strict';
module.exports = function(sequelize, DataTypes) {
var user = sequelize.define('user', {
username: DataTypes.STRING(30), //remove
password: DataTypes.STRING(255),
emailaddress: DataTypes.STRING(255),
firstname: DataTypes.STRING(30),
middlename: DataTypes.STRING(30), //remove
lastname: DataTypes.STRING(30),
approve: DataTypes.BOOLEAN,
roles: DataTypes.STRING(50),
isactive: DataTypes.BOOLEAN
}, {
classMethods: {
associate: function(models) {
// associations can be defined here
this.hasMany(models.order);
}
}
});
user.hook('afterCreate', function(usr, options) {
//hash the password
return user.update({ password: passwd }, {
where: {
id: usr.id
}
});
});
return user;
};
'use strict';
module.exports = function(sequelize, DataTypes) {
var order = sequelize.define('order', {
ponumber: DataTypes.STRING(30), //remove
orderdate: DataTypes.DATE,
shippingmethod: DataTypes.STRING(30),
shippingterms: DataTypes.STRING(30),
deliverydate: DataTypes.DATE,
paymentterms: DataTypes.STRING(30),
overridediscount: DataTypes.BOOLEAN,
shippingaddress: DataTypes.STRING(30),
shippingcity: DataTypes.STRING(30),
shippingstate: DataTypes.STRING(20),
shippingzipcode: DataTypes.STRING(10),
isactive: DataTypes.BOOLEAN
}, {
associate: function(models) {
// associations can be defined here
this.belongsTo(models.user);
this.belongsTo(models.customer);
}
});
order.hook('afterCreate', function(ord, options) {
//generate po number
return order.update({ ponumber: ponumbr }, {
where: {
id: ord.id
}//,
//transaction: options.transaction
});
});
return order;
};
'use strict';
module.exports = function(sequelize, DataTypes) {
var customer = sequelize.define('customer', {
customernumber: DataTypes.STRING(30), //remove
customerspecificationid: DataTypes.INTEGER,
customertypeid: DataTypes.INTEGER,
sportid: DataTypes.INTEGER,
customername: DataTypes.STRING(20), //remove
address: DataTypes.STRING(30),
city: DataTypes.STRING(30),
state: DataTypes.STRING(30),
zipcode: DataTypes.STRING(30),
ordercomplete: DataTypes.BOOLEAN,
isactive: DataTypes.BOOLEAN
}, {
associate: function(models) {
// associations can be defined here
this.hasMany(models.order);
}
});
customer.hook('afterCreate', function(cust, options) {
//generate the customer number
return customer.update({ customernumber: custnumber }, {
where: {
id: cust.id
}
});
});
return customer;
};
Here is the constructor and method inside of a repository class I want to join
constructor(model){
super(model.order);
this.currentmodel = model;
}
findById(id){
let that = this;
return new Promise(
function(resolve, reject) {
that.model.find({
where: { id: id },
include: [ that.currentmodel.customer, that.currentmodel.user ]
})
.then(function(order){
resolve(order);
})
.catch(function(err){
reject(err);
})
});
}
私はドキュメンテーションを見直し、インターネットでこの問題の修正を探していましたが、私は答えを見つけることができません。誰かが私が行方不明になる可能性のあることについていくつかの光を当ててくださいでしたか?
上記の例では、主キーを使用して注文レコードに関連付けられたユーザーと顧客を取得しようとしています。私が今までに見つけたfindByのシナリオはすべて、顧客とユーザーに結びついた注文のリストを得ることになります。この注文に外部キーが関連付けられている注文と顧客を検索するには、何を変更する必要がありますか?
それでした。感謝万円。あなたが気にしないなら、もう1つの質問。これまでは、 '... id ='のようなレコードを作成または更新する前に、プロパティを設定して外部キーを追加していました。これを行うための好ましい方法はありますか、またはこのアプローチは受け入れられますか? – user1790300
私はあなたの質問をはっきりと聞きましたが、モデルのidをすでに持っていれば関連付けることができ、idを使ってレコードを作成して、1対1や1対1のような単純な関連付けを行うことができます –