Sequelize - 为我的模型实现一个垃圾桶
Sequelize - Implementing a trash for my models
我正在使用 Sequelize 构建我的电子商店的后端。我已经为 clients
、products
、orders
等定义了模型。我希望这些模型的任何实例都是 "trashable"、,即 就像删除的实例一样,我希望被删除的实例不会出现在调用 <Model>.findAll()
、<ModelA>.get<ModelB>s()
甚至 <ModelA>.findAll({ include: [{ model: <ModelB> }]
的结果中。但我仍然希望能够查询那些被丢弃的实例(并最终恢复它们)。
我正在考虑的解决方案是在我的模型 (ENUM('active', 'trashed')
) 中添加一个 .status
属性,然后在我的所有模型中添加一个 beforeFind
挂钩以过滤掉不是 active
的实例,除非查询明确搜索 id(s) 或 trashed
项。
不过,我担心传递给我的 beforeFind
挂钩的查询的潜在复杂性。如何检测查询正在搜索的内容以及应如何修改它们以过滤掉垃圾项目?这个解决方案可能还有其他我什至没有考虑过的缺点……
在尝试实施之前,我想知道其他人是否尝试过这种模式,他们是如何做到的以及遇到了哪些困难。谢谢:-)
您在寻找 paranoid
选项吗?
我正在使用 Sequelize 构建我的电子商店的后端。我已经为 clients
、products
、orders
等定义了模型。我希望这些模型的任何实例都是 "trashable"、,即 就像删除的实例一样,我希望被删除的实例不会出现在调用 <Model>.findAll()
、<ModelA>.get<ModelB>s()
甚至 <ModelA>.findAll({ include: [{ model: <ModelB> }]
的结果中。但我仍然希望能够查询那些被丢弃的实例(并最终恢复它们)。
我正在考虑的解决方案是在我的模型 (ENUM('active', 'trashed')
) 中添加一个 .status
属性,然后在我的所有模型中添加一个 beforeFind
挂钩以过滤掉不是 active
的实例,除非查询明确搜索 id(s) 或 trashed
项。
不过,我担心传递给我的 beforeFind
挂钩的查询的潜在复杂性。如何检测查询正在搜索的内容以及应如何修改它们以过滤掉垃圾项目?这个解决方案可能还有其他我什至没有考虑过的缺点……
在尝试实施之前,我想知道其他人是否尝试过这种模式,他们是如何做到的以及遇到了哪些困难。谢谢:-)
您在寻找 paranoid
选项吗?