在CompoundJS中的一对多关系

我是CompoundJS的新手,并且在与jugglingDBbuild立一对多关系时遇到问题。我使用MySQL作为数据库。

我已经build立了两个模型的书和作者。

书有很多作者。

这是我的schema.js (db / schema.js):

 var Book = describe('Book', function () { property('title', String); property('isbn', String); property('authorId', Number); set('restPath', pathTo.books); }); var Author = describe('Author', function () { property('name', String); property('authorId', Number); set('restPath', pathTo.authors); }); 

我把关系放在models / Book.js中。 这是我的Book.js (models / Book.js):

 module.exports = function (compound, Book) { Book.hasMany(compound.models.Author, {as: 'author', foreignKey: 'authorId'}); }; 

这是我的Author.js (models / Author.js):

 module.exports = function (compound, Author) { Author.belongsTo(compound.models.Book, {as: 'books', foreignKey: 'authorId'}); }; 

问题是我不能创造这些关系。 当我检查表中没有外键设置在表中。

我从Book.js和Author.js模型中删除关系,并把关系放在schema.js本身中

之后,schema.js看起来像这样:

 var Book = describe('Book', function () { property('title', String); property('isbn', String); property('authorId', Number); set('restPath', pathTo.books); }); var Author = describe('Author', function () { property('name', String); property('authorId', Number); set('restPath', pathTo.authors); }); Book.hasMany(Author, {as: 'author', foreignKey: 'authorId'}); Author.belongsTo(Book, {as: 'books', foreignKey: 'authorId'}); 

但结果是一样的。

上面的代码有问题吗? 如果是的话,我该怎么解决呢?

看起来,compoundjs的作者还没有实现模型function。 现在你的关系应该在模式文件的末尾被定义。

另外,通过存储define函数的返回值,您正在覆盖schemea对象。 删除var Book =和var Author =。

而且,foreignKey是自动创build的。

schema.js:

 describe('Book', function () { property('title', String); property('isbn', String); set('restPath', pathTo.books); }); describe('Author', function () { property('name', String); set('restPath', pathTo.authors); }); Book.hasMany(Author, {as: 'author', foreignKey: 'authorId'}); Author.belongsTo(Book, {as: 'books', foreignKey: 'authorId'}); 

更新:

哦。 你的问题不是定义关系,而是使用它们。 jugglingdb的文档不是很清楚。 为了build立关系,您必须使用以下格式:请参阅DOCS获取更多信息: https : //github.com/1602/jugglingdb

 Author.find(id_here_as_string, function(err, author_record){ book_record = new Book({ title: 'whatever' isbn: 'again whatever here' }); book_record.author(author_record); book_record.save() }) 

要么

 Author.find(id_here_as_string, function(err, author_record){ book_record = author_record.books.build({ title: 'whatever' isbn: 'again whatever here' }); book_record.save() })