问题标签 [soft-delete]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2946 浏览

cakephp - SoftDelete 行为 CakePHP - 删除问题

我正在使用 CakeDC 的 utils 包中的 Soft Delete - Behavior。
https://github.com/CakeDC/utils

现在的问题是:我想检查控制器是否有软(已删除),如下所示:

不幸的是,我得到的结果是错误的。意味着如果用户被(软)删除,我将收到“用户尚未被删除”消息,反之亦然。

我知道 Cake 如何处理这个请求,并且 beforeDelete 钩子必须返回 false,才能停止(硬)删除数据。但是在 github 上提到这个问题,现在应该已经修复了。我是唯一一个这不起作用的吗?

除了简单地否定条件之外,还有其他解决此问题的方法吗?(不想那样做,这是不对的)

提前问候和感谢!
纳赫里

0 投票
1 回答
622 浏览

mongoid - mongoid 包含软删除的文档

Mongoid 支持软删除

假设我已经从其中一个集合中软删除了一个文档。

现在我需要一个包含该集合中软删除文档的查询。

我怎样才能做到这一点?

我需要为此制定一个单独的方法吗?

谢谢

0 投票
4 回答
12242 浏览

doctrine-orm - 侦听器“SoftDeleteableListener”未添加到 EventManager

我按照这个例子来测试softdeletable我运行 Symfony 2.1.0-DEV 的项目的扩展。

我配置了我的 config.yml,如下所示:

我的控制器动作:

当我运行代码时,它总是显示异常:Listener "SoftDeleteableListener" was not added to the EventManager!

经过一段时间的调试,我发现该类SoftDeleteableFilter具有功能getListener()

然而$listeners属性没有SoftDeleteableListener项目,但它有其他侦听器,例如

  • Gedmo\Tree\TreeListener
  • Gedmo\Sortable\SortableListener
  • Gedmo\Sluggable\SluggableListener
  • Gedmo\Loggable\LoggableListener
  • Gedmo\Timestampable\TimestampableListener
  • Gedmo\Translatable\TranslatableListener

它们是从 loadClassMetadata 生成的。我认为它可能从我的学说扩展.yml 服务侦听器生成:

所以我尝试添加以下内容:

但它仍然显示Listener "SoftDeleteableListener" was not added to the EventManager!

我需要在哪个 SoftDeleteableListener 实例中添加监听器?

0 投票
2 回答
1074 浏览

java - 使用休眠过滤非原始类型

在我的数据库中,我不删除对象。而是完成了软删除。表示将 delted 标志设置为 true。这应该由休眠使用@Filter 注释过滤。这可行,但我遇到的问题是字段没有被过滤。

例如,我有一个子类和一个包含子类的父类。如果子对象被删除并且父对象被加载,则父对象包含子对象(尽管已正确设置已删除标志)。但我希望像处理集合一样过滤子对象。有没有办法做到这一点?

我试着把这个领域当作收藏品,但这对我不起作用。

0 投票
1 回答
1580 浏览

c# - 软删除休眠

我想对我的数据库表进行软删除...我已经应用了以下语句(如此处所述http://nhibernate.info/blog/2008/09/06/soft-deletes.html和很多问题关于 SO)。Fattura 是我要应用逻辑删除的表(没有触发器)

Fattura.hbm.xml

Fattura.cs - 模型对象

删除事件监听器

以这种方式配置

事件触发但它没有设置 Cancelato =1。这是我的删除命令

0 投票
2 回答
2239 浏览

grails - 使用 Hibernate Filters Plugin 软删除 Grails 中的实体

我正在寻找一种方法来避免从数据库中删除我的用户,而是将它们标记为已删除并且不要将它们带回查询中。

我找到了这个插件http://grails.org/plugin/hibernate-filter,它是完成任务的好工具。

但是当我尝试实施我的解决方案时,我遇到了同样的问题,这些问题的解决方案在互联网上没有(或者我无法找到)。

所以,接下来,我描述一下我解决软删除问题的方法。

0 投票
2 回答
1104 浏览

linq - ExpressionVisitor 软删除

我们在使用实体框架实现软删除功能时遇到了一些问题。这个想法是使用一个知道 EF 上下文的存储库。在存储库级别上,我们实现了一个插件系统,只要对存储库执行操作,就会执行这些插件。例如,当我们调用Repository.GetQuery<Relation>()插件时,就会执行。其中一个插件是 a LogicalDeletePlugin,这个插件应该Where(x => x.IsDeleted)向 select 中的每个表添加一个语句。IsDeleted想法是使用ExpressionVisitor访问 linq 表达式并找到所有“表”选择语句并添加IsDeleted条件来实现此插件。

为了澄清问题/问题,我将使用一些代码示例来解释这个问题。

上面的 c# 代码将产生以下 SQL 代码:

正如您在生成的 SQL 查询中看到的那样,IsDeleted语句被添加到TestWorks = x.Bonus.Where(y => !y.IsDeleted)“选择”代码中。这TestVisitor就是目前正在做的事情。但现在的问题是我们如何在其他选择上也实现这一点,而x => !x.IsDeleted不是在Test = x.Bonus部分上添加。

ExpressionVisitor 是完成此任务的正确方法还是我应该使用其他解决方案?感谢所有帮助!如果解释不够清楚,请告诉我,我会尝试提供一些额外的信息!

编辑:

以上是我添加到 ExpressionVisitor 中的内容。现在,当我取消注释返回 Expression.MamkeMemberaccess 代码时,会引发异常,因为它不需要 MemberExpression 或其他东西。

以下是我想出的解决方案:

QueryConditional 是一个持有类型为 Expression 的类Expression<Func<T, bool>>

InjectconditionVisitor 可以与 InterceptWith(QueryInterceptor NuGet 包)结合使用,例如query.InterceptWith(new InjectConditionVisitor(new QueryConditional(x => x.Deleted == true)).

0 投票
1 回答
1487 浏览

sql - 父子关系中级联软删除的方法

我有一个使用软删除的简单模式(这就是它的设计方式并且无法更改)。有两个表参与架构:Company (id, is_deleted)其中当然是表的Employee (id, company_id, is_deleted)FK 。规则是:company_idCompany

  • 如果一个Companyis_deleted = true,那么所有Employee提到的那个公司都应该有is_deleted = true
  • 但是即使父母有,Employee也可能有。is_deleted = trueCompanyis_deleted = false

我的两个问题是 a) 如何执行这些约束?b)当a被软删除时,如何最简单地确保is_deleted = true级联。Company

我添加了标签 postgresql 和 sql server 因为这些是我最感兴趣的数据库。如果其他 rdbms:es 中还有其他解决方案,我也想听听它们。

0 投票
1 回答
1149 浏览

ruby-on-rails-3 - 通过Rails 3中的多态关系获取偏执删除对象

我有一个 Audit 类,用于通过属性存储操作。

:by 和 :on 的多态关联用于存储应审计的任何类型的对象。主要是因为多态在模式中被分解为类型和 id,因此应该能够存储我所有的模型对象。

我遇到的问题来自所有被审计的对象也都在使用 paranoia gem。paranoia gem 在每个模型表中引入了一个 deleted_at 列,该列通过其 default_scope 来检查该模型上的每个查询,default_scope 设置为“where(deleted_at is null)”。paranoia gem 还提供了一个 .with_deleted 方法,它允许通过打开 default_scope 进行直接查询,结果还返回已被偏执/软删除的对象。

但是,如果我有任何已删除的项目,我会尝试使用列出的所有已审核项目。

我不知道如何告诉 Rails 为每个添加 .with_deleted 调用的多态 :by 和 :on 对象运行查找查询。我的猜测是,rails 通过以下方式查找多态关系的对象

在我的情况下,这会给我应用了偏执狂宝石的 default_scope 的对象。

我试图在 Audit 中覆盖 self.find_by_sql 但没有运气。我陷入了一些 Arel 方法中,我需要进一步阅读这些方法才能继续前进。

我看到了以下解决方案,但我不知道该怎么做。

  1. 覆盖多态查找。如何?
  2. 在评估之前将原始 SQL 作为字符串获取,并 sub/gsub Where deleted_at is null 部分。

任何和所有关于如何解决这个问题的建议都将不胜感激。

0 投票
4 回答
5141 浏览

symfony - 可软删除行为并真正删除实体

我正在使用DoctrineExtensionsStofDoctrineExtensionsBundle来获得可软删除的行为。

它在我的应用程序的前端工作得非常好。

在后端,我需要“硬”删除实体的选项。

我在我的管理控制器中禁用了过滤器(我使用 SonataAdmin):

这有效(软删除的实体出现在列表中),但是当我尝试删除它时,实体确实再次被软删除。如何强制“硬”删除?