5

私はCompoundJSを初めて使用し、jugglingDBとの1対多のリレーションシップの設定に問題がありました。データベースとしてMySQLを使用しています。

BookとAuthorの2つのモデルを設定しました。

本には多くの著者がいます。

これは私の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'});

しかし、結果は同じです。

上記のコードに問題はありますか?もしそうなら、どうすればそれを解決できますか?

4

1 に答える 1

4

Compoundjs の作成者は Model 機能を実装していないようです。今のところ、関係はスキーマ ファイルの最後で定義する必要があります。

また、define 関数の戻り値を格納することで、schema オブジェクトをオーバーライドしています。var Book = と var Author = を削除します。

また、foreignKey は自動的に作成されます。

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 のドキュメントは、これについてあまり明確ではありません。関係を確立するには、次の形式を使用する必要があります: 詳細については、ドキュメントを参照してください: 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()
})
于 2013-03-06T19:58:26.490 に答える