Nhibernate Session.Get和Session.CreateCriteria有什么区别?
我的故事是:
在我们的产品中,我们通过添加一个接口ISoftDeletable实现了softDeletion,实现此接口的每个类都有deletedDate和deletedBy字段.我们还有AuditableEntity类,这意味着实现它的每个类都有:createdDate,createdBy,modifiedDate,modifiedBy.
以下是消息来源:
public class SaveUpdateEventListener : DefaultSaveEventListener
{
private readonly ISecurityContextService securityContextService;
public SaveUpdateEventListener(ISecurityContextService securityContextService)
{
this.securityContextService = securityContextService;
}
protected override object PerformSaveOrUpdate(SaveOrUpdateEvent @event)
{
this.PrepareAuditableEntity(@event);
return base.PerformSaveOrUpdate(@event);
}
private void PrepareAuditableEntity(SaveOrUpdateEvent @event)
{
var entity = @event.Entity as AuditableEntity;
if (entity == null)
{
return;
}
if (this.securityContextService.EdiPrincipal == null)
{
throw new Exception("No logged user.");
}
if (entity.Id == 0)
{
this.ProcessEntityForInsert(entity);
}
else
{
this.ProcessEntityForUpdate(entity);
}
}
private void ProcessEntityForUpdate(AuditableEntity entity)
{
entity.ModifiedBy …Run Code Online (Sandbox Code Playgroud) 我SoftDeletes在Laravel5中使用模型.
但在某些情况下(保持历史记录没用),我想做物理删除(从表中删除行)而不是softDelete.
class PaymentInvoices extends Model {
use SoftDeletes;
}
Run Code Online (Sandbox Code Playgroud)
有没有强制物理删除的方法?
在我的项目中,所有模型都扩展了BaseModel类,SoftDeletes默认情况下使用trait。但在某些特定情况下,例如在课堂上,ShouldHardDelete我不希望我的数据库记录被软删除。让我们假设,我不能否认扩展BaseModel.
我应该在我的ShouldHardDelete班级中进行哪些更改以防止它使用软删除?
我想知道的是:在Yii中是否可以在模型中添加某种属性,因此只显示属性isdeleted设置为的项目0?
所以我正在寻找一种方法,Yii会忽略这些项目的实例...类似于:
public function rules()
{
return array(
...
array('isdeleted', 'shouldEqualTo=>0'),
...
);
}
Run Code Online (Sandbox Code Playgroud)
我觉得乱搞rules()将是一种方式,但它不起作用或我做错了...
我试图阻止我的数据库表上的任何删除.目前正在使用Entity Framework 5.首先,这是我的代码,
public override int SaveChanges()
{
var Changed = ChangeTracker.Entries();
if (Changed != null)
{
foreach (var entry in Changed.Where(e => e.State == EntityState.Deleted))
{
entry.State = EntityState.Unchanged;
}
}
return base.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
我已经设法以这种方式阻止它.当我使用EF的Remove方法时它不再工作了.但是,我想要实现的是,当我使用给定ID的remove方法时,我想设置isDeleted(这是我所有数据库中的(位)列表)值为false.目前,我迷失在互联网上的文件和共享代码中.
谢谢
使用来自https://github.com/snipe/laravel4-starter的 Laravel 4.1入门套件,我有两个模型:类别和兴趣.两者都是软删除的.我希望索引视图根据用户的意愿显示3个不同的列表:"全部显示","显示已删除"和"显示未删除".一切都很好,直到我在它们之间添加了HasMany/BelongsTo关系.
楷模:
class Category extends Elegant
{
protected $softDelete = true;
public function interests()
{
return $this->hasMany('Interest');
}
}
class Interest extends Elegant
{
protected $softDelete = true;
public function category()
{
return $this->belongsTo('Category');
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当视图调用$interest->category->name属于软删除类别的兴趣时,一切都会爆发ErrorException: Trying to get property of non-object.我怀疑这是因为它$interest->category是NULL,因为它已被软删除,因为它没有被加载.
控制器:
class InterestsController extends AdminController
{
public function getIndex()
{
$showDisabled = Utility::GetShowDisabled();
switch ($showDisabled) {
case 'only':
// How to load *only* soft-deleted Interest with their categories …Run Code Online (Sandbox Code Playgroud) 我有软可删除和唯一实体字段。效果很好,但是...
如果记录被“软删除”删除,我将无法创建相同的记录。我认为这是因为数据库中的记录没有真正删除。但我需要这样做。
那么最好的方法是什么?
感谢您的建议
我想保留数据 delete
而不是soft-delete(使用is_deleted字段),我想将数据移动到另一个表(对于已删除的行)
我也不知道这个策略的名称是什么.叫档案?两表删除?
为了使这项工作,
我需要能够做到
对于给定对象(将被删除),查找具有该对象的外键或一对一键的所有其他对象.(这可以通过/sf/answers/162053741/完成,实际上比这更难,代码不够)
插入一个新对象并让#1中找到的所有对象指向这个新对象
删除对象
(essentiall我正在做级联移动而不是级联删除,1~3步应该以递归方式完成)
这将是最方便的,以弥补这方面,它支持一个mixin delete()和undelete()一个对象和一个查询集.
有人创造过这样的吗?
TLDR:当SoftDeletes特征包含在我的父模型中时,我不再将父模型的软删除实例作为子动态属性.如何才能做到这一点?
我已经定义了几个基本模型,如下所示:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Builder;
class User extends Model
{
use SoftDeletes;
public function posts()
{
return $this->hasMany("App\Post");
}
}
class Post extends Model
{
public function user()
{
return $this->belongsTo("App\User");
}
public function scopePending(Builder $query)
{
return $query->whereNull("pending");
}
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我想列出待处理的帖子,所以我这样做:
<?php
namespace App\Controllers;
use App\Post;
class PostController extends Controller
{
public function index()
{
$posts = Post::pending()->get();
return view("post.index", ["pending"=>$posts]);
}
}
Run Code Online (Sandbox Code Playgroud)
最后,在我看来:
@foreach($pending as $post)
{{ $post->title }}<br/>
{{ …Run Code Online (Sandbox Code Playgroud) 假设我们有两个实体Customer和AppUser,它们是一对多关系。
客户实体:
@Entity
@Table(name = "CUSTOMER")
//Override the default Hibernation delete and set the deleted flag rather than deleting the record from the db.
@SQLDelete(sql="UPDATE customer SET deleted = '1' WHERE id = ?")
//Filter added to retrieve only records that have not been soft deleted.
@Where(clause="deleted <> '1'")
public class Customer implements java.io.Serializable {
private long id;
private Billing billing;
private String name;
private String address;
private String zipCode;
private String city;
private String state;
private String notes;
private …Run Code Online (Sandbox Code Playgroud)