web-dev-qa-db-ja.com

続編で1対多の関連付けをモデル化する方法は?

私はSequelizeを初めて使用し、1対多の関係をどのようにモデル化する必要があるかを理解しようとしています。

私の問題は次のとおりです。1つの用語、多くの論文。

var Term = sequelize.define( 'Term', ... );
var Paper = sequelize.define( 'Paper', ... );

私に用語があるとしましょう。各学期には多くの論文を含めることができますが、学期の論文を追加/削除したいと思います。また、学期のすべての論文を入手したいと思います。

var term;
...
term.getPapers( ... );
term.setPapers( ... );
term.addPaper( paper );
term.removePaper( paper );

さて、私が論文を持っているとしましょう。論文の用語を取得/設定したいのですが。

var paper;

...

paper.getTerm();
paper.setTerm();

Sequelizeを使用してどのように達成できますか?私は何時間もドキュメントを研究していて、ネットでいくつかの接着剤を探していましたが、結果はありませんでした。この種の関連性は、続編ではほとんど文書化されていません(1対1および多対多の方がはるかに優れています)。

更新

さて、数時間後、私はそれがどのように機能するかを理解しました:

Term.hasMany( Paper, { as: 'papers' } );
Paper.hasOne( Term );

今、私たちはできる:

term.addPaper( paper );
term.removePaper( paper );

paper.getTerm()
  .success( function( term )
  {
    ...
  });
paper.setTerm( term );

私はDjangoに慣れていますが、コードとドキュメントの両方の点で、Sequelizeははるかに成熟していないようです...

13
TPJ

まず、関連付けを作成する必要があります。あなたはそれを正しくしました:

  Term.hasMany( Paper, { as: 'papers' } );
  Paper.hasOne( Term );

次に、この宣言を同期する必要があります。

  sequelize.sync();

そして今、データを永続化します。関連付ける前に、オブジェクトを保存する必要があります。

  term.create()...
  paper1.create()...
  paper2.create()...

  term.setPapers([paper1, paper2]).success(function() {
     // saved!
  })

参照: http://docs.sequelizejs.com/en/1.7.0/docs/associations/#many-to-many-associations

3
Rafa0809

それはあなたがデータベースをどのように構造化したかに依存します、これは考えます。

paper.hasOne(term,{as:"PaperTerm"})
1
Gntem