我需要能够删除邮件并恢复它们,直到页面没有重新加载.所以我的'messages'表中有一个字段'is_deleted'.我想要的是删除它后面的这些"删除"记录.什么是最好的解决方案?
我的头脑正在阅读所有关于软删除的专业文章和文章.但这是我知道实现这一目标的唯一方法:
维护外键和用户信息(历史数据)即使用户被删除/不活动,注释,附件和故事表中也有外键.因此,仍然可以确定是谁写了这篇评论等.
其他信息:
停用的用户无法登录,也不会包含在列表中.
但是如果我使用软删除,那么每次查询该表时,在sql语句的WHERE中添加额外的列并不是很好.
该怎么办?希望你们能提供一些意见.
注意:我使用mysql和ROR
我正在使用Laravel 5.2开发一个Laravel Web应用程序.我的问题很简单......我如何听取forceDelete事件以强制删除模型关系?
我一直在寻找网络和SO以及一些我发现的所有问题/答案都归结为删除方法,而且在API文档中我还没有找到很多...
在我的例子中,我有一个注册表模型和一个RegistryDetail模型
注册表
|id|name|surname|....
RegistryDetail表
|id|id_registry|....
我已经为这个boot功能创建了:
protected static function boot()
{
    parent::boot();
    static::deleted(function($registry) {
        // Delete registry_detail
        $registry->registryDetail->delete();
    });
    static::restored(function($registry) {
        // Restore registry_detail
        $registry->registrydetail()->withTrashed()->restore();
    });
}
由于两个模型都只在调用delete()方法时才调用SoftDeletes该static::deleted函数.如果我调用forceDelete()方法,则不会从数据库中删除相关模型.
如果您需要更多信息,请告诉我.
提前致谢
此代码用于执行软删除.它首先删除记录.如果删除成功,则回滚然后更新同一记录的标志列.如果该记录具有依赖性并且无法删除,则不执行任何操作.为了知道,行动发生了,我保留了Status变量.但是,无论如何,它总是会产生无效的结果.我哪里错了.
ALTER PROCEDURE SoftDelete
(
  @TableName nvarchar(50), @ColName nvarchar(50),
  @Id nvarchar(50)
)
AS
BEGIN
  DECLARE @qryDel nvarchar(MAX),@qryUpd nvarchar(MAX),@Status int = null,
          @Param  nvarchar(MAX)
  SET @Param = N'@TableName nvarchar(50), @ColName nvarchar(50),
                @Id nvarchar(50)'
  SET @qryDel = N'delete from @tablename where @colname=@id'
  SET @qryUpd = N'update @tablename set deleted = 1 where @colname=@id'
  BEGIN TRY
    BEGIN TRANSACTION
      EXECUTE sp_executesql @qryDel, @Param, @TableName, @ColName, @Id
    ROLLBACK TRANSACTION
    BEGIN TRANSACTION
      EXECUTE sp_executesql @qryUpd, @Param, @TableName, @ColName, @Id
    COMMIT TRANSACTION
    SET @Status = 1
  END …我有一个Model在Laravel中使用软删除的,并且还使用了一个包含boot函数的特征:
class Design extends Model {
    uses Softdeletes, Versionable;
    // ...
}
trait Versionable {
    public static function boot(){
    // ...
    }
}
SoftDeletes本身仍然可以正常工作:delete_at列已正确填充。但是,Designs::get()不能正确过滤软删除的模型:
return Designs::get();
[{"id":1,"project_id":1,"name":"","description":null,"created_at":"2015-12-04 21:06:40","updated_at":"2015-12-04 21:06:40","deleted_at":null},
 {"id":2,"project_id":1,"name":"A Design","description":"a different description", "created_at":"2015-12-04 21:06:57","updated_at":"2015-12-04 21:07:09","deleted_at":"2015-12-04 21:07:09"}]
从Versionable中删除Versionable特征或boot方法可以解决此问题。
为什么会发生这种情况,我该如何解决?
我有一个简单的应用程序与表格和模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use SoftDeletes;
class Post extends Model
{
   protected $table = 'post';
   protected $dates = ['deleted_at'];
   protected $softDelete = true;
}
我试图做软删除的例子,我正在使用路由,例如route.php:
<?php
use App\Post;
use Illuminate\Database\Eloquent\SoftDeletes;
Route::get('/delete', function(){
    $post = new Post();
    Post::find(12)->delete();
});
我有一个使用迁移创建的列"created_at":
    Schema::table('post', function (Blueprint $table) {
        $table->softDeletes();
    });
,但是当我运行网站时,它删除了具有所选ID的行,而不是向此列添加时间.我哪里错了?
默认情况下,AbpUserRole和AbpRole实现ISoftDelete. 是否可以禁用它?
我试图这样做:
[AbpAuthorize(AppPermissions.Pages_Administration_Roles_Delete)]
public async Task DeleteRole(EntityDto input)
{
    using (CurrentUnitOfWork.DisableFilter(AbpDataFilters.SoftDelete))
    {
        var role = await _roleManager.GetRoleByIdAsync(input.Id);
        var users = await UserManager.GetUsersInRoleAsync(role.Name);
        foreach (var user in users)
        {
            CheckErrors(await UserManager.RemoveFromRoleAsync(user, role.Name));
        }
        CheckErrors(await _roleManager.DeleteAsync(role));
    }
}
尽管过滤器在当前工作单元中被禁用,但它不起作用。该实体被标记为已删除。
在我的表中,我没有 delete_at 列。
但在 Laravel 模型中,在 where 条件下,deleted_at 返回 null。
下面是我的代码
public function load($id) {
        return $this
            ->select(sprintf('%s.*', $this->getTable()))
            ->where(sprintf('%s.id', $this->getTable(), $this->getKeyName()), '=', $id)
            ->first();
    }
有人可以帮助我吗?如何解决这个问题?
soft-delete ×8
laravel ×4
php ×3
eloquent ×2
laravel-5 ×2
mysql ×2
c# ×1
laravel-5.2 ×1
sql ×1
sql-server ×1
t-sql ×1