多态多对多
还是就这之前标签的例子,但是为了不破坏之前的代码,这回新建一个scopeManyToMany.ts
文件。代码如下。
scope 里面指定的值, 就是在连接表创建数据的时候,会自动把里面设定好的字段填充好,并且查询的时候会自动把这个条件当做 where 的一项,所以这样我们就能做出区分了。
import Sequelize from 'sequelize';
const sequelize = new Sequelize('nodelover', 'root', '', {
host: 'localhost',
dialect: 'mysql',
pool: {
max: 5,
min: 0,
idle: 10000
},
});
const Post = sequelize.define('Post', {});
const ItemTag = sequelize.define('item_tag', {
tag_id: {
type: Sequelize.INTEGER
},
type: {
type: Sequelize.STRING
},
type_id: {
type: Sequelize.INTEGER
}
});
const Tag = sequelize.define('tag', {
name: Sequelize.STRING
});
Post.belongsToMany(Tag, {
through: {
model: ItemTag,
scope: {
type: 'post'
}
},
foreignKey: 'type_id',
constraints: false
});
Tag.belongsToMany(Post, {
through: {
model: ItemTag,
scope: {
type: 'post'
}
},
foreignKey: 'tag_id',
constraints: false
});
(async () => {
await sequelize.sync();
let post = await Post.create();
await (post as any).createTag({name: '春风'});
let tag = await Tag.create({name:'夏雨'});
await (tag as any).createPost();
})();
挑出一段代码做个简单的说明
Tag.belongsToMany(Post, {
through: {
model: ItemTag,
scope: {
type: 'post'
}
},
foreignKey: 'tag_id',
constraints: false
});
以上代码阐述了一下内容
Tag 与 Post 建立的关系模型是 ItemTag,此时的主体是 Tag,当 Tag使用 createPost、XXXPosts、或者其他方法的时候,会自动把 ItemTag 模型里面的 type 字段填充为 Post
,并且 ItemTag 与 Tag 之间有关系的字段,并且在 ItemTag 模型里面的字段叫做 Tag_id。
运行以上代码之后,便可以在数据库中看到相关的数据。
当前内容版权归 nodelover.me 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 nodelover.me .