在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() })