有没有人知道与Cake 1.3.x兼容的SoftDeletable Behavior的替代方法?
如果没有任何现成的行为,有关我如何在最新的Cake中执行此操作的任何建议?
弄清楚快速入侵.首先,如果您的表引入了一个名为deleted的tinyint(1)无符号字段,默认为0.
在app/app_model.php中,添加以下函数:
function softDelete( $id ) {
if( $id && $this->hasField( 'deleted' ) ) {
$this->id = $id;
return $this->saveField( 'deleted', 1 );
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
然后从你的控制器的方法(执行删除)调用,
$this->Model->softDelete( $id );
Run Code Online (Sandbox Code Playgroud)
Catch是,无论你在哪里执行find(),都需要指定删除的条件!= 1.
仍然试图找出如何以与SoftDeletable行为相同的方式实现它.
我有一个实体A,B extends A并尝试使用联接继承策略进行软删除.
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@SQLDelete("UPDATE A SET deleted = 1 WHERE id = ?")
A {
@Id long id;
boolean deleted;
}
@Entity
B extends A {}
Run Code Online (Sandbox Code Playgroud)
似乎Hibernate正确地将表设置A为deleted = 1,但也删除了表中的整个条目B.当然,我想保留这个条目.
有什么想法吗?
我正在使用Hibernate 3.5.5和基于注释的实体定义.尝试了Hibernate 3.6.2.
通过实体管理器,软删除行为在执行删除语句中正常工作,如下代码:
$entity = $this->em->getRepository('Users')->find(7);
$this->em->remove($entity);
$this->em->flush();
Run Code Online (Sandbox Code Playgroud)
但是当通过QueryBuilder执行相同的功能时,硬删除将在数据库上执行
$qb = $this->em->createQueryBuilder();
$qb->delete('Users', 'p');
$qb->where($qb->expr()->eq('p.id', ':id'));
$qb->setParameters(array("id" => 7));
$result = $qb->getQuery()->getResult();
Run Code Online (Sandbox Code Playgroud)
如何通过实体管理器或查询构建器在所有情况下允许软删除
如何确定模型是否在Laravel 4.2中使用软删除?
在Laravel API中我找到了函数isSoftDeleting(),但显然它已经从Laravel 4.2中删除,因为它使用了SoftDeletingTrait.
我如何确定模型现在是否使用软删除?
我有这种布局的模型:
class SafeDeleteModel(models.Model):
.....
deleted = models.DateTimeField(editable=False, null=True)
......
class MyModel(SafeDeleteModel):
safedelete_policy = SOFT_DELETE
field1 = models.CharField(max_length=200)
field2 = models.CharField(max_length=200)
field3 = models.ForeignKey(MyModel3)
field4 = models.ForeignKey(MyModel4)
field5 = models.ForeignKey(MyModel5)
class Meta:
unique_together = [['field2', 'field3', 'field4', 'deleted'],]
Run Code Online (Sandbox Code Playgroud)
这里的场景是我从不希望用户删除数据。相反,删除只会隐藏记录。但是,我仍然希望所有非软删除的记录都遵守唯一键约束。基本上,我希望有尽可能多的重复删除记录,但只能存在一个唯一的未删除记录。所以我想包括“已删除”字段(由 django-safedelete 库提供),但问题变成了 Django 的唯一检查失败,“psycopg2.IntegrityError:重复键值违反唯一约束”对于 ['field2', 'field3' , 'field4', 'deleted'] 因为 NULL 不“等于” NULL 并且它在 PostgreSQL 中产生 false。
有没有办法用我的 Django 模型布局来强制执行 unique_together 约束?或者是否有更好的想法物理删除记录,然后将其移动到存档数据库,如果用户想要恢复记录,那么软件将在存档中查找记录并重新创建它?
我一直在寻找一种方法来避免从数据库中删除我的用户,而是将它们标记为已删除,并且不会将它们带回查询中.
我找到了这个插件http://grails.org/plugin/hibernate-filter,这是一个很棒的工具.
但是当我试图实施我的解决方案时,我通过了相同的问题,其解决方案在互联网上没有(或者我无法找到).
接下来,我描述了解决软删除问题的方法.
所以我尝试使用 mongoose-delete 插件软删除 mongoDB 中的数据,但请求只获得了 mongoose 对象的对象 ID。所以为了“软删除”数据,我必须先做一个findOne,然后对它使用删除功能。是否有任何插件或功能可以让我仅使用对象 ID 软删除这些数据?而不是对数据库使用两次命中。数据很关键,因此只需要软删除选项,而不是硬删除。而且我不能使用通用的更新功能,需要一些插件或节点模块来为我做这件事。
我有一些关于 Laravel 软删除的问题。我已经搜索了它的作用和含义,关于软删除最容易理解的部分来自这句话
“当模型被软删除时,它们实际上并没有从您的数据库中删除。相反,在模型上设置了一个 Deleted_at 属性并将其插入到数据库中。如果模型具有非空的 deleted_at 值,则该模型已被软删除。要为模型启用软删除,请在模型上使用 Illuminate\Database\Eloquent\SoftDeletes 特征并将 deleted_at 列添加到您的 $dates 属性:"
所以这是我根据那句话提出的问题:
问题 1:
那么,当我在代码中使用软删除时,当我尝试删除一些数据时,视图页面(blade.php)中的数据是否消失而数据库仍然包含这些数据?
问题 2:
我看到有些人使用称为 static::deleting 的东西,我不太明白这是如何工作的?你能解释一下它的作用吗?谢谢
问题 3:
如何使用软删除删除数据?我看到人们只是将一些东西放入他们的模型中而不是使用按钮,那么这是否意味着您只能在模型中手动删除它,而不仅仅是单击视图页面中的删除按钮?
我刚刚使用此迁移从表中删除了softDelete:
Schema::table("items", function ($table) {
$table->dropSoftDeletes();
});
Run Code Online (Sandbox Code Playgroud)
但现在每个查询都会产生:
Column not found: 1054 Unknown column 'items.deleted_at' in 'where clause'
Run Code Online (Sandbox Code Playgroud)
代码没有明确引用此列.是否已在某处缓存,如果是,如何清除它?
我使用 Ef Core 2.1,在其中启用了软删除查询过滤器。
在某些情况下,我想从实体中检索软删除导航属性,但无法检索数据(导航属性为 null,因为它被软删除)。
我使用这个文档(写于 2017 年)作为参考,并指出
过滤器不能包含对导航属性的引用。
我想知道是否有任何方法可以启用这种行为。
public class Form {
public int Id { get; set; }
public virtual Sprint Sprint {get; set;}
}
public class Sprint: ISoftDeleteable {
public int Id { get; set; }
public string Name {get; set;}
}
// Indicates that every model that implements this interface should use soft delete.
public interface ISoftDeleteable
{
}
// Both statements have returned null.
Sprint sprint = applicationDbContext.Forms.FirstOrDefault(f => f.Id == …Run Code Online (Sandbox Code Playgroud) soft-delete ×10
laravel ×3
php ×2
.net-core ×1
behavior ×1
c# ×1
cakephp ×1
database ×1
django ×1
doctrine-orm ×1
eloquent ×1
grails ×1
grails-orm ×1
hibernate ×1
java ×1
laravel-5 ×1
model ×1
mongoose ×1
node.js ×1
postgresql ×1
recycle-bin ×1
symfony ×1