我正在使用Sequelize和Express,以及Node js,并且尝试为模型定义defaultScope。Card和Tag具有多对多关联。
// 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.相关列表:
- 卡片
- 标签
1.具有相关的卡:
- 标签
1.具有关联的标签:
- 卡片
我设法得到1和2,但当我添加Tag.addScope
时,什么都不起作用了。
当我通过定义作用域all
(例如)将defaultScope
更改为另一个字符串时,以及当我使用model.scope("all").findAll()
时,这是有效的,但这不是我想做的,因为我想使用defaultScope来获得默认行为,这样我就不必在查询命令(如findAll...)中指定作用域
我有办法做到吗?
1条答案
按热度按时间kxe2p93d1#
你试图设置它的方式导致了一个无休止的递归,你不能这样做。
如果您这样设置它并查询
Card
,它将包括Tag
,Tag
将包括Card
,Card
将包括Tag
,依此类推,直到您得到Maximum call stack size exceeded
。您可以使用一种变通方法,即添加另一个不包含任何内容的作用域,然后在
defaultScope
中为模型指定该作用域。这应该会给你提供所需的行为。