Вы должны использовать через ассоциации .
Многие-ко-многим через ассоциации ведут себя так же, как ассоциации "многие-ко-многим", за исключением таблицы соединенияавтоматически создан для вас.В ассоциации «многие ко многим» вы определяете модель, содержащую два поля, которые соответствуют двум моделям, которые вы будете объединять.При определении ассоциации вы добавите сквозной ключ, чтобы показать, что следует использовать модель, а не таблицу автоматического объединения.
Давайте рассмотрим модели Post
и Tag
в качестве примера.Post
имеет и принадлежит многим Tag
, а Tag
имеет и принадлежит многим Post
.Эти две модели будут объединены через модель PostTag
.
Наша Post
модель:
/**
* Post.js
*
* @description :: A model definition. Represents a database table/collection/etc.
* @docs :: https://sailsjs.com/docs/concepts/models-and-orm/models
*/
module.exports = {
tableName: 'posts',
attributes: {
name: {
type: 'string',
required: true
},
// Many to many: Post has and belongs to many Tag.
tags: {
collection: 'Tag',
via: 'postId',
through: 'PostTag'
}
};
Наша Tag
модель:
/**
* Tag.js
*
* @description :: A model definition. Represents a database table/collection/etc.
* @docs :: https://sailsjs.com/docs/concepts/models-and-orm/models
*/
module.exports = {
tableName: 'tags',
attributes: {
name: {
type: 'string',
unique: true,
required: true
},
// Many to many: Tag has and belongs to many Post.
posts: {
collection: 'Post',
via: 'tagId',
through: 'PostTag'
}
}
};
НашаPostTag
модель (мы создаем ее вручную, мы не хотим, чтобы Sails.js создавал ее автоматически):
/**
* PostTag.js
*
* @description :: A model definition. Represents a database table/collection/etc.
* @docs :: https://sailsjs.com/docs/concepts/models-and-orm/models
*/
module.exports = {
tableName: 'posts_tags',
attributes: {
postId: {
model: 'Post'
},
tagId: {
model: 'Tag'
}
}
};
Модель PostTag
на самом деле является таблицей соединений.В этой модели вы можете определить дополнительные поля.
Надеюсь, это поможет.