CompoundJS中的一对多关系

Jet*_*ohn 5 node.js express railway.js compoundjs

我是CompoundJS的新手,我在使用jugglingDB设置一对多关系时遇到了问题.我使用MySQL作为数据库.

我已经设置了两个模型Book和Author.

书中有很多作者.

这是我的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);
});
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

我从模型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'});
Run Code Online (Sandbox Code Playgroud)

但结果是一样的.

上面的代码有什么问题吗?如果是这样我怎么解决?

leg*_*ind 4

看来compoundjs的作者还没有实现Model功能。目前,您的关系应该在架构文件的末尾定义。

此外,您还可以通过存储定义函数的返回值来覆盖 schemaa 对象。删除 var Book = 和 var Author =。

并且,foreignKey 是自动创建的。

架构.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'});
Run Code Online (Sandbox Code Playgroud)

更新:

哦。您的问题不是定义关系,而是使用它们。jugglingdb 的文档对此不是很清楚。为了建立关系,您必须使用以下格式:有关更多信息,请参阅文档: 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()
})
Run Code Online (Sandbox Code Playgroud)

或者

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()
})
Run Code Online (Sandbox Code Playgroud)