[英]Sequelize and defaultScope with Models associated
我将 Sequelize 与 Express 和 Node js 一起使用,我正在尝试为模型定义 defaultScope。 Card 和 Tag 具有多对多关联。 这是模型定义和 addScope
// Models Associations
// ONE TO MANY
List.hasMany(Card, {
as: "cards",
});
Card.belongsTo(List, {
as: "list",
});
// MANY TO MANY
Card.belongsToMany(Tag, {
as: "tags",
through: "card_has_tag",
updatedAt: false,
});
Tag.belongsToMany(Card, {
as: "cards",
through: "card_has_tag",
updatedAt: false,
});
// SCOPES
Card.addScope("defaultScope", {
include: {
association: "tags",
},
});
List.addScope("defaultScope", {
include: {
association: "cards",
include: "tags",
},
});
// What I would like to implement
// If I comment lines below => List and Card queries are working
Tag.addScope("defaultScope", {
include: {
association: "cards",
},
});
我想默认打印所有具有关联关系的相关信息。
我想在为每个模型执行 sequelize 查询时获取此信息。
我设法得到 1 和 2,但是当我添加Tag.addScope
时,一切都不再起作用了。
当我通过定义范围all
(例如)将defaultScope
更改为另一个字符串时,以及当我使用model.scope("all").findAll()
时,这是有效的,但这不是我想做的,因为我想使用 defaultScope 来获得默认行为,这样我就不必在查询命令中指定范围,例如 (findAll...)
有什么办法可以做到吗?
您尝试设置它的方式会导致无休止的递归,您根本不能那样做。
如果您这样设置并查询Card
,它将包含Tag
,其中包含Card
,其中包含Tag
等等,直到您获得Maximum call stack size exceeded
。
您可以使用一种解决方法,即添加另一个不包含任何内容的范围,然后在defaultScope
中为模型指定该范围。
Tag.addScope("noInclude", {}); Card.addScope("noInclude", {}); Tag.addScope("defaultScope", { include: [ { model: Card.scope("noInclude"), as: "cards" } ] }); Card.addScope("defaultScope", { include: [ { model: Tag.scope("noInclude"), as: "cards" } ] });
这应该会给你想要的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.