web-dev-qa-db-ja.com

続編Model.hasOneエラー:モデルはModelTwoに関連付けられていません

SequelizejsをExpressフレームワークに統合しました。すべてのモデルを構成し、それを使用して最初のクエリを作成しようとしました。

「エラー:モデルはModelTwoに関連付けられていません!」というエラーが表示され続けます。

app.get('/',function(req,res){
 db.Member.findAll({include:[{model:db.MemberProfile,as:'Profile'}]})
 .success(function(users){
  if(users){
   res.json(users);
  }else{
   res.send('no users');
  }
 });
});

// model.js

module.exports = function(sequelize,sql) {
 return sequelize.define('Model', {
  //attributes
 });

 Model.hasOne('ModelTwo',{foreignKey:'model_id'});

};

//model_two.js

module.exports = function(sequelize,sql) {
 return sequelize.define('ModelTwo', {
  //attributes
 });

//no relationship defined. Tried ModelTwo.hasMany('Model',{foreignKey:'id'});
//but it yields the same resulting error
};

何がうまくいかないかについてのアイデアはありますか? sequelize1.7.0-rc6の最新バージョンを使用しています。

19
Eric Shell

これは実際には別の場合同じエラーをスローします。

モデルを含めるときにエイリアシングにasオプションを使用しようとすると、同じ問題が発生しました。デフォルト名をエイリアスしている限り、これはエラーをスローしませんが、別の名前を試してみるとエラーが発生します。

ソリューション、

それははっきりと言っています

関連付けがエイリアス化されている場合(asオプションを使用)、モデルを含めるときにこのエイリアスを指定する必要があります

つまり、その逆も同様です。

インクルードするときにモデルにエイリアスを付ける場合は、その関連付けにエイリアスを付ける必要があります(asオプションを使用)。

28
code-jaff

私はそれを考え出した。ドキュメントにある単純なModel.hasOne(bla)の代わりに、モデル定義で以下を使用して関連付けを追加する必要があるようです。

classMethods:{
  associate:function(models){
    Model.hasOne(models.ModelTwo,{foreignKey:'foreign_key'})
  }
}

このコードは、関連付けのドキュメントではなく、サイトでのエクスプレスのチュートリアルに含まれていました。

7
Eric Shell