我是Sequelize的新手,我想弄明白,我应该如何建立一对多的关系。
我的问题如下:一个学期,很多论文。
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实现?我已经研究了几个小时的文档,还在网上寻找一些胶水,但没有任何结果。我发现这种关联在续集中很难记录(一对一和多对多的方式更好)。
更新:
好吧,几个小时后我弄清楚它是如何工作的:
Term.hasMany( Paper, { as: 'papers' } );
Paper.hasOne( Term );
现在我们可以做到:
term.addPaper( paper );
term.removePaper( paper );
paper.getTerm()
.success( function( term )
{
...
});
paper.setTerm( term );
我已经习惯了Django,看起来Sequelize在代码和文档方面都不那么成熟......
答案 0 :(得分: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
答案 1 :(得分:1)
这取决于你如何构建数据库,这会想到..
paper.hasOne(term,{as:"PaperTerm"})