2013-04-02 12 views
11

私はSequelizeの新人です。私は、1対多の関係をどのようにモデル化すればよいのか把握しようとしています。続編で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(); 

どのようにして後遺症を起こすことができますか?私は何時間もドキュメントを勉強していましたが、ネットでいくつかのグルーを探していましたが、結果はありませんでした。私は、この種の関連性が後天的に非常によく文書化されていないことを知っています(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はコードとドキュメンテーションの両方で、成熟していないと思われます。

+1

は、Sequelizeの団体は私にとって非常に直感的であり、ドキュメントが支援されていません。これを投稿していただきありがとうございます。 –

+3

この場合、 'Paper.hasOne()'が正しいアソシエーションタイプであると確信していますか? 'Paper.belongsTo()'を使うべきではありませんか?それはドキュメントによればより意味をなさない。 –

+0

私は1対1と多対多が良いとは思わないので、私は同意しません。ドキュメントはとても奇妙です。アソシエーションによって作成されたメソッドのパラメータと戻り値についても説明していません。これを投稿していただきありがとうございます。 :D(読んだ後、@SlavaFominIIはおそらく正しいと思います) – SCLeo

答えて

2

それはあなたが、これはと思ったんだろう、データベースの構造化されている方法によって異なります。..

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

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

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私は同意