Я смущен, как применять BelongsToMany с книжной полкой.BookshelfJS: Как применять BelongsToMany?
Скажите, есть фильм, который принадлежит многим жанрам, например.
"The Artist" has the genres "Comedy, Drama"
Я установки объединения таблицы называется join_movies_genres
, который имеет FK movie_id
и genre_id
.
Я пытаюсь найти жанры из фильма с определением through(...)
и без него. Я получаю, однако, неопределенные цели, похожие на:
relatedData:
{ type: 'belongsToMany',
target:
{ [Function]
NotFoundError: [Function: ErrorCtor],
NoRowsUpdatedError: [Function: ErrorCtor],
NoRowsDeletedError: [Function: ErrorCtor] },
targetTableName: 'genres',
targetIdAttribute: 'id',
joinTableName: 'join_movies_genres',
foreignKey: { debug: true },
otherKey: undefined,
parentId: 1,
parentTableName: 'movies',
parentIdAttribute: 'id',
parentFk: 1,
throughTarget:
{ [Function]
NotFoundError: [Function: ErrorCtor],
NoRowsUpdatedError: [Function: ErrorCtor],
NoRowsDeletedError: [Function: ErrorCtor] },
throughTableName: 'join_movies_genres',
throughIdAttribute: 'id',
throughForeignKey: { debug: true } }
Итак, как бы я подошел к настройке этого отношения? Как включить вывод отладки?
Текущее состояние модели является:
var Movie = bookshelf.Model.extend({ tableName: 'movies', genres: function() { // return this.belongsToMany(Genre, 'join_movies_genres', 'movie_id', 'genre_id', {debug: true}); // return this.belongsToMany(Genre).through(JoinMovieGenre, 'movie_id', 'genre_id'); return this.belongsToMany(Genre, 'join_movies_genres', 'movie_id', 'genre_id').through(JoinMovieGenre, {debug: true}); } }); var Genre = bookshelf.Model.extend({ tableName: 'genres' }); new Movie({title: 'The Artist'}).fetch({debug: true}).then(function(m) { console.log(m.toJSON()); console.log(m.genres()) })
песочница этого кода в https://github.com/mulderp/bookshelf-demo/tree/cli_migrations
Обновление: Есть несколько вещей, которые я только что узнал. Соглашения об именах упрощают извлечение отношений, а выборка позволяет настраивать запрос с параметрами: fetch ({withRelated: ['genres'], require: true, debug: true}). - все еще нужно изучить эту проблему немного больше – poseid